Technote 1181

Sherlock's Find by Content Text Extractor Plug-ins



ñ⁄éü

äTóv

Text Extractor ÉvÉâÉOÉCÉìÇÃíËã`

ÉvÉâÉOÉCÉìÇ™îFéØÇ≈Ç´ÇÈ MIME É^ÉCÉvÇÃìoò^

ÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÇÈç\ë¢ëÃ

Text Extractor Ç™íËã`Ç∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`Éì

ÉTÉìÉvÉãÉvÉâÉOÉCÉì

ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁÇà Text Extractor ÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵ

ÉRÅ[ÉhÉäÉXÉgÇÃçıà¯

éQçlï∂å£

DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ≈ÇÕÅAÉRÉìÉeÉìÉcåüçı Text Extractor ÉvÉâÉOÉCÉìÇÃçÏê¨Ç…égópÇ∑ÇÈ API DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅBText Extractor ÉvÉâÉOÉCÉìÇÕÉRÉìÉeÉìÉcåüçıÇ…ÇÊǡǃégópÇ≥ÇÍÅAçıà¯ÇÃçÏê¨Ç‚ÉtÉ@ÉCÉãÇÃóvñÒÇçsǧÇΔÇ´Ç…èëófiÇ…äiî[Ç≥ÇÍǃǢÇÈÉeÉLÉXÉgèÓïÒÇéÊÇËèoǵNjÇ∑ÅBDZÇÍÇ…ÇÊÇËÅAÉÜÅ[ÉUÇÕÅAèëéÆê›íËÉRÉ}ÉìÉhÇ‚ HTML É^ÉOǻǫÇÃé¸ï”ÉfÅ[É^Ç‚ÅAèëófiÇ…äiî[Ç≥ÇÍǃǢÇÈèÓïÒÇΔÇÕíºê⁄ä÷åWÇÃǻǢǪÇÃëºÇÃÉfÅ[É^ÇÃçıà¯çÏê¨ÇîÇØÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBèëófiÇÃÉ^ÉCÉvÇ…ëŒâûǵÇΩ Text Extractor ÉvÉâÉOÉCÉìÇçÏê¨Ç∑ÇÈDZÇΔÇ≈ÅAÉfÉxÉçÉbÉpÇÕÅAÉÜÅ[ÉUÇ™ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ÇÊǡǃçÏê¨Ç≥ÇÍÇΩèëófiÇ…äiî[Ç≥ÇÍǃǢÇÈèÓïÒÇëŒè€Ç…à”ñ°ÇÃdžÇÈåüçıÇé¿çsÇ∑ÇÈDZÇΔÇâ¬î\ǵNjÇ∑ÅB

Text Extractor ÉvÉâÉOÉCÉìÇÕÅAMac OS 8.6 Ç‹ÇΩÇÕǪÇÍà»ç~ÇΔÇΔLJDžégópÇ∑ÇÈDZÇΔÇëOíÒÇ…çÏê¨Ç≈Ç´Ç‹Ç∑ÅBMac OS 8.6 Ç…ÇÕÅAÅuHTML Text ExtractorÅvÅAÅuPDF Text ExtractorÅvÇΔǢǧ 2 ǬÇà Text Extractor ÉvÉâÉOÉCÉìÇ™ïtëÆÇµÇƒÇ¢Ç‹ÇµÇΩÅBÅuHTML Text ExtractorÅvÇÕ HTML ÉtÉ@ÉCÉãÇ©ÇÁ HTML É^ÉOÇéÊÇËãéÇËÅAHTML ÉtÉ@ÉCÉãÇ…äiî[Ç≥ÇÍǃǢÇÈÉeÉLÉXÉgÇÃÇ›Çï‘ǵNjÇ∑ÅBÇ‹ÇΩÅAÅuPDF Text ExtractorÅvÇÕ Adobe Çà PDF (Portable Document Format) ÉtÉ@ÉCÉãÇ©ÇÁÉeÉLÉXÉgèÓïÒÇæÇØÇéÊìæÇµÇ‹Ç∑ÅBMac OS 8.5 Ç≈ HTML ÉtÉ@ÉCÉãÇÃçıà¯ÇçÏê¨Ç∑ÇÈÇΔÅAèëófiÇ…äiî[Ç≥ÇÍǃǢÇÈÉeÉLÉXÉgÇΔ HTML É^ÉOÇÃóºï˚Ç™çıà¯ÇÃíÜÇ…ëgÇ›çûÇ‹ÇÍǃǢNjǵÇΩÅBÇ≥ÇÁÇ…ÅAPDF ÉtÉ@ÉCÉãÇÕçıà¯çÏê¨ÇÃëŒè€Ç©ÇÁèúäOÇ≥ÇÍǃǢNjǵÇΩÅBMac OS 8.6 Ç≈ÇÕÅADZÇÍÇÁÇÃÉtÉ@ÉCÉãÇ©ÇÁéÊÇËèoÇ≥ÇÍÇΩà”ñ°ÇÃdžÇÈÉeÉLÉXÉgèÓïÒÇæÇØÇ™ÅAÉRÉìÉeÉìÉcåüçıÇ…ÇÊǡǃégópÇ≥ÇÍÇÈçıà¯ÉtÉ@ÉCÉãÇÃíÜÇ…ëgÇ›çûÇ‹ÇÍÇÈÇÊǧDžǻÇËNjǵÇΩÅB

DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ≈ÇÕÅAText Extractor ÉvÉâÉOÉCÉìÇÃçÏê¨ÇΔÉCÉìÉXÉgÅ[ÉãÇ…ïKóvÇ»èÓïÒÇíÒãüǵNjÇ∑ÅBÇ‹ÇΩÅAè⁄ç◊Ç»ÉRÉÅÉìÉgÇâ¡Ç¶ÇΩÅuÉTÉìÉvÉã Text Extractor ÉvÉâÉOÉCÉìÅvLJópà”Ç≥ÇÍǃǢNjÇ∑ÅBÉfÉxÉçÉbÉpÇÕÅADZÇÃÉTÉìÉvÉãÇ…èCê≥Çâ¡Ç¶ÇÈÇæÇØÇ≈ÅAìΔé©ÇÃÉtÉ@ÉCÉãÉtÉHÅ[É}ÉbÉgÇ…ëŒâûǵÇΩìΔé©ÇÃÉvÉâÉOÉCÉìÇçÏê¨Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB




äTóv

Text Extractor ÇÕÅAÉtÉ@ÉCÉãÇÃçıà¯çÏê¨ÇΔóvñÒÇÃê∏ìxÇå¸è„Ç≥ÇπÇ‹Ç∑ÅBó·ÇΔǵǃÅAÉäÉXÉg 1 ÇÃÇÊǧǻ HTML ÉtÉ@ÉCÉãǙdžÇÈÇΔǵNjÇ∑ÅB

                  
 <!--DZÇà HTML ÉtÉ@ÉCÉãÇ…ÇÕÅAHTML É^ÉOÇΔ ASCII ÉeÉLÉXÉgÇÃóºï˚
Ç™ä‹Ç‹ÇÍǃǢÇÈÅBçıà¯ÇçÏê¨Ç∑ÇÈÇΩÇflÇ…ÇÕÅAÉ^ÉOÇñ≥éãǵÅAèëófiÇ…
ä‹Ç‹ÇÍÇÈÉeÉLÉXÉgÇæÇØÇçıà¯Ç…ëgÇ›çûÇfiDZÇΔÇ™ñ]NjǵǢ-->
                  
<HTML>
<BODY>
This is a sample document.
</BODY>
</HTML>
                  
 
ÉäÉXÉg 1 ÉTÉìÉvÉã HTML ÉtÉ@ÉCÉã

HTML ÉtÉHÅ[É}ÉbÉgÇîFéØÇ≈ǴǻǢÇΔÅAè„ãLÇÃèëófiÇ…ä‹Ç‹ÇÍÇÈÇ∑Ç◊ǃÇÃíPåÍÇ™çıà¯Ç…ëgÇ›çûÇ‹ÇÍÇ‹Ç∑ÅBDZÇÃÇΩÇflÅAÉRÉìÉeÉìÉcåüçıÇ≈ÅubodyÅvÇåüçıÇ∑ÇÈÇΔè„ãLÇÃèëófiÇ™åüèoÇ≥ÇÍÇ‹Ç∑Ç™ÅAÉÜÅ[ÉUÇ™ÉuÉâÉEÉUÇ≈ÉtÉ@ÉCÉãÇäJǢǃLJÅubodyÅvÇΔǢǧíPåÍÇå©Ç¬ÇØÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅBìØólÇ…ÅAHTML èëófiÇóvñÒÇ∑ÇÈÇΔÅAóvñÒÇÃíÜÇ…ÇÕ HTML É^ÉOÇ™ï\é¶Ç≥ÇÍǃǵNjǢNjÇ∑ÅBHTML Text Extractor ÇÕ HTML ÉtÉ@ÉCÉãÇÃÉtÉHÅ[É}ÉbÉgÇê≥ǵÇ≠îFéØÇ≈Ç´ÇÈÇΩÇflÅAHTML É^ÉOÇñ≥éãǵǃÅAèëófiÇäJÇ¢ÇΩÇΔÇ´Ç…ÉÜÅ[ÉUÇ©ÇÁå©Ç¶ÇÈÉeÉLÉXÉgÇæÇØÇï‘ǵNjÇ∑ÅBè„ãLÇÃó·Ç≈ÇÕÅAÅuThis is a sample document.ÅvÇΔǢǧÉeÉLÉXÉgÇæÇØÇ™çıà¯Ç…ëgÇ›çûÇ‹ÇÍÇ‹Ç∑ÅB



ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


Text Extractor ÉvÉâÉOÉCÉìÇÃíËã`

Text Extractor ÉvÉâÉOÉCÉìÇÕÅAà»â∫ÇÃÇÊǧǻì¡ê´ÇéùǬÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇ≈Ç∑ÅB

  • ÉtÉ@ÉCÉãÉ^ÉCÉv: 'fbce'
  • ÉNÉäÉGÅ[É^É^ÉCÉv: 'fndf'
  • ÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgñº: ÅuIATextExtractorÅv
  • ÉVÉXÉeÉÄì‡ÇÃà íu: Åuã@î\ägí£ÅvÉtÉHÉãÉ_ÇÃÅuåüçıÅvÉtÉHÉãÉ_ì‡Ç…džÇÈÅuÉRÉìÉeÉìÉcåüçıÉvÉâÉOÉCÉìÅvÉtÉHÉãÉ_ÅBÉtÉHÉãÉ_É^ÉCÉv kFindByContentPluginsFolderType ('fbcp') ÇÕÅAÉtÉHÉãÉ_ÇåüçıÇ∑ÇÈ FindFolder ä÷êîÇ…ìnÇ∑DZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
  • ÉGÉNÉXÉ|Å[ÉgÇ≥ÇÍÇÈä÷êî -- Text Extractor ÉvÉâÉOÉCÉìÇ≈ÇÕÅAéüÇÃä÷êîÇÇ∑Ç◊ǃÉCÉìÉvÉäÉÅÉìÉgǵǃÉGÉNÉXÉ|Å[ÉgÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
    • IAPluginInit -- Text Extractor ÉvÉâÉOÉCÉìÇ™ÉIÅ[ÉvÉìÇ≥ÇÍÇÈÇΔÇ´ÅAIAPluginInit ÉGÉNÉXÉ|Å[Égä÷êîÇ™åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
    • IAPluginTerm -- Text Extractor ÉvÉâÉOÉCÉìÇégÇ¡ÇΩÉZÉbÉVÉáÉìÇ™èIóπÇ∑ÇÈÇΔÇ´ÅAIAPluginTerm ä÷êîÇ™åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃéûì_Ç≈ÅAÉvÉâÉOÉCÉìÇÕïKóvÇ»ÉNÉäÅ[ÉìÉAÉbÉvëÄçÏÇé¿çsÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
    • IAGetExtractorVersion -- ÉvÉâÉOÉCÉìÇ™ëŒâûǵǃǢÇÈ Text Extractor ÉCÉìÉ^ÉtÉFÅ[ÉXÇÃÉoÅ[ÉWÉáÉìÇï‘ǵNjÇ∑ÅB
    • IACountSupportedDocTypes -- ÉvÉâÉOÉCÉìÇ™èàóùï˚ñ@ÇîFéØÇ≈Ç´ÇÈèëófiÉ^ÉCÉvÇÃêîÇï‘ǵNjÇ∑ÅBDZÇÃåƒÇ—èoǵÇÕÅAIAGetIndSupportedDocType åƒÇ—èoǵDžëŒÇ∑ÇÈóLå¯Ç»ÉCÉìÉfÉbÉNÉXÇÃç≈ëÂêîÇï‘ǵNjÇ∑ÅB
    • IAGetIndSupportedDocType -- ÉvÉâÉOÉCÉìÇ™ÉTÉ|Å[ÉgÇ∑ÇÈ n î‘ñ⁄ÇÃèëófiÉ^ÉCÉvÇï‘ǵNjÇ∑ (êÊì™ÇÃçÄñ⁄ÇÃÉCÉìÉfÉbÉNÉXÇÕ 0 Ç≈ÇÕÇ»Ç≠ 1)ÅBǪÇÍǺÇÍÇÃèëófiÇÕÅAMIME (Multipurpose Internet Mail Extension) É^ÉCÉvÇ®ÇÊÇ—ÉTÉuÉ^ÉCÉvÇ…ÇÊǡǃéØï Ç≥ÇÍÇ‹Ç∑ÅBÇΩÇΔǶnjÅAHTML èëófiÇÕÅutext/htmlÅvÇΔǢǧ MIME É^ÉCÉvÇéùÇøÇ‹Ç∑ÅB
    • IAOpenDocument -- èëófiÇÃÉeÉLÉXÉgÇ÷ÇÃéQèΔÇçÏê¨ÇµÇ‹Ç∑ÅBIADocRef å^ÇÕÅAèëófiÇéQèΔÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃíËã`Ç≥ÇÍÇÈ opaque ÉfÅ[É^å^Ç≈Ç∑ÅBIADocAccessorPtr Ç…ÇÕÅAèëófiÇ÷ÇÃéQèΔÇΔÅAǪÇÃèëófiÇ…ÉAÉNÉZÉXÇ∑ÇÈÇΩÇflÇ…égópÇ∑ÇÈä÷êîÇ÷ÇÃÉ|ÉCÉìÉ^Ç™ä‹Ç‹ÇÍÇ‹Ç∑ÅBèëófiÉAÉNÉZÉbÉTÉ|ÉCÉìÉ^ÇÕÅAIACloseDocument Ç™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈Ç…ï‘Ç≥ÇÍÇÈ IADocRef ÇégópÇ∑ÇÈÇ∑Ç◊ǃÇÃåƒÇ—èoǵDžëŒÇµÇƒóLå¯Ç≈Ç∑ÅB
    • IACloseDocument -- ÉvÉâÉOÉCÉìíËã`Çà IADocRef ÉIÉuÉWÉFÉNÉgÇ…ïKóvÇ»ÉNÉäÅ[ÉìÉAÉbÉvëÄçÏÇé¿çsǵNjÇ∑ÅB
    • IAGetNextTextRun -- ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈèëófiÇÃéQèΔÇ™ë∂ç›Ç∑ÇÈèÍçáÇ…ÅAçÄñ⁄Ç…ä÷òAÇ√ÇØÇÁÇÍÇΩÉeÉLÉXÉgÇÃéüÇÃÉâÉìÇéÊìæÇµÇ‹Ç∑ÅBÉeÉLÉXÉgÇÃéüÇÃÉâÉìÇ≈ÉoÉbÉtÉ@ÇñÑÇflÇ‹Ç∑ÅBì¸óÕéûÅAioSize ÇÕÉoÉbÉtÉ@ÇÃÉTÉCÉYÇ≈Ç∑Ç™ÅAèoóÕéûÇ…ÇÕ ioSize ÇÕÉoÉbÉtÉ@Ç…èëÇ´çûÇ‹ÇÍÇΩÉoÉCÉgêîÇ…Ç»ÇËÇ‹Ç∑ÅBèëófiÇÃÉGÉìÉRÅ[ÉfÉBÉìÉOÇ‹ÇΩÇÕåæåÍÇ™ïœçXÇ≥ÇÍÇÈÇΔÅAerrIAEndOfTextRun Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅBǻǮÅAerrIAEndOfTextRun ÇΔǢǧé¿çsåãâ ÇÕÅADZÇÃÉãÅ[É`ÉìÇ™ãÛÇÃÉoÉbÉtÉ@Çï‘Ç∑ÇΔǢǧDZÇΔÇïKÇ∏ǵLJà”ñ°Ç∑ÇÈLJÇÃÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅB
    • IAGetTextRunInfo -- íºëOÇà IAGetNextTextRun åƒÇ—èoǵDžÇÊǡǃï‘Ç≥ÇÍÇΩÉeÉLÉXÉgÇÃÉGÉìÉRÅ[ÉfÉBÉìÉOÇΔåæåÍÇéÊìæÇµÇ‹Ç∑ÅB

Text Extractor ÉvÉâÉOÉCÉìÇÃÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇ…ÇÕÅAÉvÉâÉOÉCÉìÇ™èàóùÇ≈Ç´ÇÈÉtÉ@ÉCÉãÇÃéÌófiÇímÇÁÇπÇÈ 1 ǬNjÇΩÇÕï°êîÇà 'mimp' ÉäÉ\Å[ÉXÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅBDZÇÍÇÁÇÃÉäÉ\Å[ÉXÇÃÉtÉHÅ[É}ÉbÉgDžǬǢǃÇÕÅAéüÇÃÅuÉvÉâÉOÉCÉìÇ™îFéØÇ≈Ç´ÇÈ MIME É^ÉCÉvÇÃìoò^ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB



ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


ÉvÉâÉOÉCÉìÇ™îFéØÇ≈Ç´ÇÈ MIME É^ÉCÉvÇÃìoò^

Text Extractor ÇÃÉNÉâÉCÉAÉìÉgÇÕèëófiÇ MIME É^ÉCÉvÇ…É}ÉbÉvÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÉNÉâÉCÉAÉìÉgÇ…ÇÊÇÈÉvÉâÉOÉCÉìÇ™îFéØÇ≈Ç´ÇÈèëófiÉ^ÉCÉvÇîªífÇ∑ÇÈç€Ç…ñÇ…óßǬÇÊǧDžÅAÉvÉâÉOÉCÉìÇÃÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇ…ÇÕ 1 ǬNjÇΩÇÕï°êîÇà 'mimp' ÉäÉ\Å[ÉXÇëgÇ›çûÇfiDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBìΔé©Çà 'mimp' ÉäÉ\Å[ÉXÇÕÅAÅuIAExtractor.rÅvÉtÉ@ÉCÉãÇéQçlDžǵǃíËã`Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉäÉXÉg 2 Ç…é¶Ç∑ÇÊǧDžÅA'mimp' ÉäÉ\Å[ÉXÇ…ÇÕÅAÉtÉ@ÉCÉãÇà Finder É^ÉCÉvÇΔ MIME É^ÉCÉvÇ…É}ÉbÉvÇ∑ÇÈÉtÉ@ÉCÉãägí£éqÇ…ä÷Ç∑ÇÈèÓïÒÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB

                  
/* PDF (Portable Document Format) èëófiÇ…ëŒÇ∑ÇÈÉTÉìÉvÉã 'mimp' ÉäÉ\Å[ÉX */
                  
 #include "IAExtractor.r"
 resource 'mimp' (128) {
     kIACurrentMIMEMappingVersion,
     'PDF ',                      /* ÉtÉ@ÉCÉãÉ^ÉCÉv */
     'CARO',                      /* ÉtÉ@ÉCÉãÉNÉäÉGÅ[É^ */
     ".pdf,"                      /* ÉtÉ@ÉCÉãägí£éq */
     "application/pdf,"           /* MIME É^ÉCÉv   */
     "Portable Document Format"   /* ê‡ñæ */
 };
                  

 
ÉäÉXÉg 2 PDF ÉtÉ@ÉCÉãÇ…ëŒÇ∑ÇÈÉTÉìÉvÉã 'mimp' ÉäÉ\Å[ÉX

çıà¯ÇçÏê¨Ç∑ÇÈÇΔÇ´ÅAÉRÉìÉeÉìÉcåüçıÇÕ Internet Config ÇÃåƒÇ—èoǵÇégǡǃÅAÉtÉ@ÉCÉãÇà MIME É^ÉCÉvÇåüèoǵNjÇ∑ÅBÉtÉ@ÉCÉãÇà MIME É^ÉCÉvÇ™åüèoÇ≥ÇÍÇÈÇΔÅAǪÇÃÉtÉ@ÉCÉãÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoÇ∑DZÇΔÇ™Ç≈Ç´ÇÈ Text Extractor ÉvÉâÉOÉCÉìÇ™é©ìÆìIÇ…égópÇ≥ÇÍÇ‹Ç∑ (Text Extractor ÉvÉâÉOÉCÉìǙǪÇà 'mimp' ÉäÉ\Å[ÉXÇÃíÜÇ≈ÉfÉRÅ[ÉhÇ™â¬î\Ç≈džÇÈDZÇΔÇí ímǵǃǢÇÈ MIME É^ÉCÉvÇ…äÓÇ√Ǣǃ)ÅB



ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


ÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÇÈç\ë¢ëÃ

ÉRÉìÉeÉìÉcåüçıÇ…ÇÕÅAText Extractor ÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÇÈÇ¢Ç≠ǬǩÇÃÉãÅ[É`ÉìÇΔÉRÅ[ÉãÉoÉbÉNÇ™ópà”Ç≥ÇÍǃǢNjÇ∑ÅBDZÇÍÇÁÇÃÉRÅ[ÉãÉoÉbÉNÇÕÉÅÉÇÉääÑÇËìñǃÇΔÉtÉ@ÉCÉãì¸óÕÇ÷ÇÃÉAÉNÉZÉXÇíÒãüǵNjÇ∑ÅBà»â∫ÇÃÉZÉNÉVÉáÉìÇ≈ÇÕÅADZÇÍÇÁÇÃÉRÅ[ÉãÉoÉbÉNÇíÒãüÇ∑ÇÈÇΩÇflÇ…ÉRÉìÉeÉìÉcåüçıÇ…ÇÊǡǃégópÇ≥ÇÍÇÈç\ë¢ëÃÇΔÅAǪÇÍÇÁÇÃÉRÅ[ÉãÉoÉbÉNǪÇÃLJÇÃDžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB

ìΔé©ÇÃÉRÅ[ÉhÇÃíÜÇ©ÇÁ Text Extractor ÉvÉâÉOÉCÉìÇåƒÇ—èoǪǧÇΔÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÉxÉçÉbÉpÇÕÅAé©ï™é©êgÇ≈DZÇÍÇÁÇÃç\ë¢ëÃÇÃçÏê¨ÇΔèâä˙âªÇçsǧDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBDZÇÍÇçsǧï˚ñ@DžǬǢǃÇÕÅAå„èqÇÃÅuÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁÇà Text Extractor ÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵÅvÇÃÉZÉNÉVÉáÉìÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB



IAPluginInitBlock ç\ë¢ëÃ

IAPluginInitBlock ÉåÉRÅ[ÉhÇÕÅAText Extractor ÉvÉâÉOÉCÉìÇ™ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈä‘ÅAèÌÇ…égópÇ≈Ç´ÇÈÉRÅ[ÉãÉoÉbÉNÉãÅ[É`ÉìÇíÒãüǵNjÇ∑ÅBDZÇÃç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕÅAÉvÉâÉOÉCÉìÇà IAPluginInit ÉãÅ[É`ÉìÇ…ÉpÉâÉÅÅ[É^ÇΔǵǃìnÇ≥ÇÍÇ‹Ç∑ÅBÇ‹ÇΩÅAIAPluginTerm ÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈëOÇ≈džÇÍÇŒÅAÉvÉâÉOÉCÉìǙDZÇÃç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^Çï€ë∂ǵÇΩÇËÅADZÇÃç\ë¢ëÃÇâÓǵǃÉRÅ[ÉãÉoÉbÉNÇçsǡǃLJà¿ëSÇ≈Ç∑ÅBÉäÉXÉg 3 ÇÕÅAIAPluginInitBlock ç\ë¢ëÃÇÃì‡óeÇΔÅADZÇÃç\ë¢ëÃÇ…ÇÊǡǃégópâ¬î\ÇΔÇ»ÇÈÉRÅ[ÉãÉoÉbÉNÇÃÉvÉçÉgÉ^ÉCÉvÇé¶ÇµÇƒÇ¢Ç‹Ç∑ÅBDZÇÃç\ë¢ëÃÇΔÉRÅ[ÉãÉoÉbÉNÇçsǧÇΩÇflÇÃÉ}ÉNÉç (ê‡ñæÇñ⁄ìIÇΔǵǃÉäÉXÉg 3 ÇÃíÜÇ…ÉãÅ[É`ÉìÉvÉçÉgÉ^ÉCÉvÇΔǵǃé¶Ç≥ÇÍǃǢÇÈ) ÇÕÅAÅuIAExtractor.hÅvÉtÉ@ÉCÉãÇÃíÜÇ≈íËã`Ç≥ÇÍǃǢNjÇ∑ÅB

 /* IAPluginInitBlock ç\ë¢ëÃÇÃíËã` */
                  
 typedef struct IAPluginInitBlock* IAPluginInitBlockPtr;
                  
 struct IAPluginInitBlock {
         IAAllocUPP  Alloc;
         IAFreeUPP   Free;
         IAIdleUPP   Idle;
 };
 typedef struct IAPluginInitBlock IAPluginInitBlock;
                  
/* ÉãÅ[É`ÉìÉvÉçÉgÉ^ÉCÉv */
                  
 void* CallIAAllocProc(IAAllocUPP Alloc, UInt32 inSize);
                  
 void CallIAFreeProc(IAFreeUPP Free, void* object);
                  
 UInt8 CallIAIdleProc(IAIdleUPP Idle);

ÉäÉXÉg 3 IAPluginInitBlock ç\ë¢ëÃÇΔÅADZÇÃç\ë¢ëÃÇÃíÜÇ≈éQèΔÇ≥ÇÍǃǢÇÈÉãÅ[É`ÉìÇÃåƒÇ—èoǵDžégópÇ≈Ç´ÇÈÉvÉçÉgÉ^ÉCÉvÇÃêÈåæ

IAPluginInitBlock ÇÕÅAÉÅÉÇÉäÇäÑÇËìñǃÇÈÉRÅ[ÉãÉoÉbÉNÇΔÅAéûä‘ÇÃǩǩÇÈèàóùÇÃé¿çsíÜÇ…åƒÇ—èoÇ∑DZÇΔÇÃÇ≈Ç´ÇÈÉAÉCÉhÉãÉRÅ[ÉãÉoÉbÉNÇíÒãüǵNjÇ∑ÅBÉvÉâÉOÉCÉìÇÕÅAMemory Manager Çíºê⁄åƒÇ—èoÇ∑ë„ÇÌÇËÇ…ÅADZÇÃç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉÅÉÇÉääÑÇËìñǃÉãÅ[É`ÉìÇégópÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBéüÇ…ÅADZÇÃç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNDžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB

CallIAAllocProc

void* CallIAAllocProc(
        IAAllocUPP Alloc,
        UInt32 inSize);
                  

Alloc -- IAPluginInitBlock ç\ë¢ëÃÇà Alloc ÉtÉBÅ[ÉãÉhÇ…äiî[Ç≥ÇÍǃǢÇÈílÅB

inSize -- äÑÇËìñǃÇÈÉoÉCÉgêîÅB

result -- ÉÅÉÇÉäÉuÉçÉbÉNÇ÷ÇÃÉ|ÉCÉìÉ^ÅAÇ‹ÇΩÉÅÉÇÉäÇ™äÑÇËìñǃÇÁÇÍǻǢèÍçáÇÕ NULLÅB


CallIAAllocProc ÇÕÅAIAPluginInitBlock ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅAÉÅÉÇÉäÇäÑÇËìñǃÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

CallIAAllocProc ÇÕÉÅÉÇÉäÇäÑÇËìñǃÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBÉvÉâÉOÉCÉìÇ≈ÇÕÅAÇ∑Ç◊ǃÇÃÉÅÉÇÉäÉäÉNÉGÉXÉgÇ…ëŒÇµÇƒÇ±ÇÃÉRÅ[ÉãÉoÉbÉNÇégópÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBê≥èÌÇ…é¿çsÇ≥ÇÍÇÈÇΔÅAÉäÉNÉGÉXÉgÇ≥ÇÍÇΩÉoÉCÉgêîÇä‹ÇfiÉuÉçÉbÉNÇ÷ÇÃÉ|ÉCÉìÉ^Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅBÉGÉâÅ[Ç™î≠ê∂Ç∑ÇÈÇ©ÅAÉäÉNÉGÉXÉgÇñûÇΩÇ∑ÇΩÇflÇ…è\ï™Ç»ÉÅÉÇÉäÇ™ë∂ç›ÇµÇ»Ç¢ÇΔÅANULL Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅB

CallIAFreeProc

void CallIAFreeProc(
        IAFreeUPP Free,
        void* object);
                  

Free -- IAPluginInitBlock ç\ë¢ëÃÇà Free ÉtÉBÅ[ÉãÉhÇ…äiî[Ç≥ÇÍǃǢÇÈílÅB

object -- CallIAAllocProc ÉRÅ[ÉãÉoÉbÉNÇ…ÇÊǡǃäÑÇËìñǃÇÁÇÍÇΩÉÅÉÇÉäÉuÉçÉbÉNÇ÷ÇÃÉ|ÉCÉìÉ^ÅB


CallIAFreeProc ÇÕÅAIAPluginInitBlock ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅACallIAAllocProc ÉãÅ[É`ÉìÇ…ÇÊǡǃäÑÇËìñǃÇÁÇÍÇΩÉÅÉÇÉäÇâï˙Ç∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

CallIAFreeProc ÇÕÅACallIAAllocProc ÉRÅ[ÉãÉoÉbÉNÇÃåƒÇ—èoǵDžÇÊǡǃäÑÇËìñǃÇÁÇÍÇΩÉÅÉÇÉäÇÃäÑÇËìñǃâèúÇçsǧÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB

CallIAIdleProc

UInt8 CallIAIdleProc(
        IAIdleUPP Idle);
                  

Idle -- IAPluginInitBlock ç\ë¢ëÃÇà idle ÉtÉBÅ[ÉãÉhÇ…äiî[Ç≥ÇÍǃǢÇÈílÅB

result -- åªç›ÇÃèàóùÇ™ÉLÉÉÉìÉZÉãÇ≥ÇÍÇÈèÍçáÇÕÉ[ÉçÇ≈ǻǢílÅAèàóùÇåpë±Ç∑ÇÈèÍçáÇÕÉ[ÉçÅB


CallIAIdleProc ÇÕÅAIAPluginInitBlock ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅAÉvÉâÉOÉCÉìÇ™éûä‘ÇÃǩǩÇÈÉ^ÉXÉNÇèàóùǵǃǢÇÈÇΔÇ´Ç…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

CallIAIdleProc ÇÕÅAéûä‘ÇÃǩǩÇÈÉ^ÉXÉNÇÃé¿çsíÜÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉãÅ[É`ÉìÇåƒÇ—èoÇ∑DZÇΔÇ≈ÅAÉvÉâÉOÉCÉìÇÕëºÇÃÉ^ÉXÉNÇ… CPU éûä‘ÇÃégópÇãñâ¬ÇµÇ‹Ç∑ÅBDZÇÃÉRÅ[ÉãÉoÉbÉNÇ™É[Éçà»äOÇÃílÇï‘Ç∑èÍçáÅAÉvÉâÉOÉCÉìÇ≈ÇÕë¶ç¿Ç…èàóùÇíÜé~ǵǃÅAé¿çsåãâ ÇΔǵǃ errIACanceled Çï‘ǵǃÇ≠ÇæÇ≥Ç¢ÅBàÍï˚ÅAÉAÉCÉhÉãÉRÅ[ÉãÉoÉbÉNÇ™É[ÉçÇï‘Ç∑èÍçáÇÕèàóùÇåpë±ÇµÅAïKóvÇ…âûÇ∂ǃçƒìxÉAÉCÉhÉãÉvÉçÉVÅ[ÉWÉÉÇåƒÇ—èoǵǃÇ≠ÇæÇ≥Ç¢ÅB

ìΔé©ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìì‡ïîÇ©ÇÁ Text Extractor ÉvÉâÉOÉCÉìÇåƒÇ—èoǪǧÇΔÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÉxÉçÉbÉpÇÕÅAé©ï™é©êgÇ≈DZÇÃç\ë¢ëÃÇèâä˙âªÇµÇƒÅAïKóvÇ»ÉRÅ[ÉãÉoÉbÉNÇíËã`Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBIAPluginInitBlock ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉvï˚ñ@Çé¶Ç∑ÉTÉìÉvÉãDžǬǢǃÇÕÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃå„îºÇ…džÇÈÅuIAPluginInitBlock ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉvÅvÇÃÉZÉNÉVÉáÉìÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IADocAccessorRecord ç\ë¢ëÃ

IADocAccessorRecord ÇÕÉtÉ@ÉCÉãì‡ÇÃèÓïÒÇ…ÉAÉNÉZÉXÇ∑ÇÈÇΩÇflÇÃÉRÅ[ÉãÉoÉbÉNÇíÒãüǵNjÇ∑ÅBÉvÉâÉOÉCÉìÇ™ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈä‘ (IAPluginInit åƒÇ—èoǵÇΔ IAPluginTerm åƒÇ—èoǵÇÃä‘)ÅAIAPluginInitBlock ÇÃì‡óeÇ™àÍíËÇ≈džÇÈÇΔǵǃLJÅAÉvÉâÉOÉCÉìÇ…ÇÕàŸÇ»ÇÈÉtÉ@ÉCÉãÇéQèΔÇ∑ÇÈ 1 ǬNjÇΩÇÕï°êîÇà IADocAccessorRecord ç\ë¢ëÃÇ™ìnÇ≥ÇÍÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBÇΩÇæÇµÅAÉvÉâÉOÉCÉìÇà IACloseDocument ÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈ÅAÉvÉâÉOÉCÉìÇà IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ IADocAccessorRecord ç\ë¢ëÃÇÕǪÇÃNjNjïœÇÌÇÁǻǢÇΔçlǶÇÈÇÃÇ™ë√ìñÇ≈Ç∑ÅBÉäÉXÉg 4 ÇÕÅAIADocAccessorRecord ÇÃíËã`ÇΔÅADZÇÃç\ë¢ëÃÇâÓǵÇΩÉRÅ[ÉãÉoÉbÉNÇ…égópÇ≈Ç´ÇÈÉ}ÉNÉç (ê‡ñæÇñ⁄ìIÇΔǵǃÉãÅ[É`ÉìÉvÉçÉgÉ^ÉCÉvÇΔǵǃé¶Ç≥ÇÍǃǢÇÈ) DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB

     /* IADocAccessorRecord ç\ë¢ëÃÇÃíËã` */
                  
 typedef struct IADocAccessorRecord*     IADocAccessorPtr;
                  
 struct IADocAccessorRecord {
                  
             /* docAccessor ÇÕÉtÉ@ÉCÉãÇí«ê’Ç∑ÇÈÇΩÇflÇ…ÉRÉìÉeÉìÉcåüçıÇ…ÇÊǡǃégópÇ≥ÇÍÇÈ opaque å^ÇÃílÅBÉvÉâÉOÉCÉìǙDZÇÃèÓïÒÇ…ÉAÉNÉZÉXÇ∑ÇÈDZÇΔÇÕÇ≈ǴǻǢ */
                  
         IADocAccessorRef                docAccessor;
         IADocAccessorOpenUPP            OpenDoc;
         IADocAccessorCloseUPP           CloseDoc;
         IADocAccessorReadUPP            ReadDoc;
         IASetDocAccessorReadPositionUPP SetReadPosition;
         IAGetDocAccessorReadPositionUPP GetReadPosition;
         IAGetDocAccessorEOFUPP          GetEOF;
 };
 typedef struct IADocAccessorRecord IADocAccessorRecord;
                  
     /* ÉãÅ[É`ÉìÉvÉçÉgÉ^ÉCÉv */
                  
 OSStatus CallIADocumentAccessorOpen(IADocAccessorRef inAccessor);
                  
 OSStatus CallIADocumentAccessorClose(IADocAccessorRef inAccessor);
                  
 OSStatus CallIADocumentAccessorRead(IADocAccessorRef inAccessor,
         void* buffer, UInt32* ioSize);
                  
 OSStatus CallIASetDocumentAccessorReadPosition(IADocAccessorRef inAccessor,
         SInt32 inMode, SInt32 inOffset);
                  
 OSStatus CallIAGetDocumentAccessorReadPosition(IADocAccessorRef inAccessor,
         SInt32* outPosition);
                  
 OSStatus CallIAGetDocumentAccessorEOF(IADocAccessorRef inAccessor, SInt32* outEOF);
                  
 /* è„ãLÇÃÉãÅ[É`ÉìÉvÉçÉgÉ^ÉCÉvÇ…ëŒâûÇ∑ÇÈÉ}ÉNÉç */
                  
 #define CallIADocumentAccessorOpen(accessor) \
 InvokeIADocAccessorOpenUPP((accessor)->docAccessor, \
 (accessor)->OpenDoc)
                  
 #define CallIADocumentAccessorClose(accessor) \
         InvokeIADocAccessorCloseUPP((accessor)->docAccessor,\
     (accessor)->CloseDoc)
                  
 #define CallIADocumentAccessorRead(accessor, buffer, size) \
         InvokeIADocAccessorReadUPP((accessor)->docAccessor, (buffer),\
     (size), (accessor)->ReadDoc)
                  
 #define CallIASetDocumentAccessorReadPosition(accessor, mode, offset) \
         InvokeIASetDocAccessorReadPositionUPP((accessor)->docAccessor,\
     (mode), (offset), (accessor)->SetReadPosition)
                  
 #define CallIAGetDocumentAccessorReadPosition(accessor,\
         outPosition) \
         InvokeIAGetDocAccessorReadPositionUPP((accessor)->docAccessor,\
     (outPosition), (accessor)->GetReadPosition)
                  
 #define CallIAGetDocumentAccessorEOF(accessor, outEOF) \
         InvokeIAGetDocAccessorEOFUPP((accessor)->docAccessor, \
         (outEOF), accessor)->GetEOF)
                  

 
ÉäÉXÉg 4 IADocAccessorRecord ç\ë¢ëÃÇΔÅADZÇÃç\ë¢ëÃÇÃíÜÇ≈éQèΔÇ≥ÇÍǃǢÇÈÉãÅ[É`ÉìÇÃåƒÇ—èoǵDžégópÇ≈Ç´ÇÈÉvÉçÉgÉ^ÉCÉvÇÃêÈåæ

ÉäÉXÉg 4 Ç≈íËã`Ç≥ÇÍǃǢÇÈ IADocAccessorRecord ÇÕÅAÉtÉ@ÉCÉãÇ÷ÇÃÉAÉNÉZÉXÇ…ïKóvÇ»Ç∑Ç◊ǃÇÃÉäÉ\Å[ÉXÇÉvÉâÉOÉCÉìÇ…íÒãüǵNjÇ∑ÅBÉvÉâÉOÉCÉìÇ≈ÇÕ File Manager Çíºê⁄åƒÇ—èoÇ≥ǻǢÇ≈Ç≠ÇæÇ≥Ç¢ÅBFile Manager ÇåƒÇ—èoÇ∑ë„ÇÌÇËÇ…ÅADZÇÍÇÁÇÃÉRÅ[ÉãÉoÉbÉNÇâÓǵǃÅAÉtÉ@ÉCÉãÇ÷ÇÃÉAÉNÉZÉXÇ…ïKóvÇ»Ç∑Ç◊ǃÇÃÉtÉ@ÉCÉãì¸óÕëÄçÏÇé¿çsǵǃÇ≠ÇæÇ≥Ç¢ÅBéüÇ…ÅADZÇÃç\ë¢ëÃÇ≈íËã`Ç≥ÇÍǃǢÇÈÉtÉBÅ[ÉãÉhÇΔÉRÅ[ÉãÉoÉbÉNDžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB

CallIADocumentAccessorOpen

OSStatus CallIADocumentAccessorOpen(
        IADocAccessorRef inAccessor);
                  

inAccessor -- IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ IADocAccessorRecord Ç÷ÇÃÉ|ÉCÉìÉ^ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


CallIADocumentAccessorOpen ÇÕÅAIADocAccessorRecord ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅAì¸óÕÇçsǧÉtÉ@ÉCÉãÇÉIÅ[ÉvÉìÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

CallIADocumentAccessorOpen ÇÕì«Ç›çûÇ›ÇçsǧÇΩÇflÇ…èëófiÇÉIÅ[ÉvÉìǵNjÇ∑ÅBÉvÉâÉOÉCÉìÇ≈ÇÕÅAà»â∫Ç…é¶Ç∑Ç¢Ç∏ÇÍÇ©ÇÃì¸óÕåƒÇ—èoǵÇé¿çsÇ∑ÇÈëOÇ…ÅADZÇÃÉãÅ[É`ÉìÇåƒÇ—èoǵǃÅAì«Ç›çûÇ›ÇÃëŒè€ÇΔÇ»ÇÈèëófiÇÉIÅ[ÉvÉìÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB

CallIADocumentAccessorClose

OSStatus CallIADocumentAccessorClose(
        IADocAccessorRef inAccessor);
                  

inAccessor -- IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ IADocAccessorRecord Ç÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅAinAccessor ÇÕÉIÅ[ÉvÉìÇ≥ÇÍÇΩèÛë‘Ç…Ç»Ç¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


CallIADocumentAccessorClose ÇÕÅAIADocAccessorRecord ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅACallIADocumentAccessorOpen åƒÇ—èoǵDžÇÊǡǃÉIÅ[ÉvÉìÇ≥ÇÍÇΩÉtÉ@ÉCÉãÇÉNÉçÅ[ÉYÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

CallIADocumentAccessorClose ÇÕÅACallIADocumentAccessorOpen åƒÇ—èoǵÇ≈ÉIÅ[ÉvÉìǵÇΩÉtÉ@ÉCÉãÇÉNÉçÅ[ÉYÇ∑ÇÈÇΩÇflÇ…åƒÇ—èoǵǃÇ≠ÇæÇ≥Ç¢ÅB

CallIADocumentAccessorRead

OSStatus CallIADocumentAccessorRead(
        IADocAccessorRef inAccessor, 
        void* buffer,
        UInt32* ioSize);
                  

inAccessor -- IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ IADocAccessorRecord Ç÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅAinAccessor ÇÕÉIÅ[ÉvÉìÇ≥ÇÍÇΩèÛë‘Ç…Ç»Ç¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

buffer -- ÉfÅ[É^Ç™äiî[Ç≥ÇÍÇÈÉoÉbÉtÉ@Ç÷ÇÃÉ|ÉCÉìÉ^ÅB

ioSize -- ì«Ç›çûÇ‹ÇÍÇÈÉoÉCÉgêîÇä‹ÇÒÇæ 32 ÉrÉbÉgêÆêîÇ÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™ílÇï‘Ç∑ÇΔÇ´ÅADZÇÃílÇÕé¿ç€Ç…ì«Ç›çûÇ‹ÇÍÇΩÉoÉCÉgêîÇ…çXêVÇ≥ÇÍÇ‹Ç∑ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


CallIADocumentAccessorRead ÇÕÅAIADocAccessorRecord ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅAÉtÉ@ÉCÉãÇ©ÇÁÉfÅ[É^Çì«Ç›çûÇfiÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

CallIADocumentAccessorRead ÇÕÅAåªç›ÇÃì«Ç›çûÇ›ÉtÉ@ÉCÉãà íuÇ©ÇÁ *ioSize ÉoÉCÉgÇì«Ç›çûǛNjÇ∑ÅBílÇ™ï‘Ç≥ÇÍÇÈÇΔÇ´ÅA*ioSize ÇÕé¿ç€Ç…ì«Ç›çûÇ‹ÇÍÇΩÉoÉCÉgêîÇîΩâfǵÅAÉãÅ[É`ÉìÇÃñflÇËílÇÕåƒÇ—èoǵǙê≥èÌÇ…é¿çsÇ≥ÇÍÇΩǩǫǧǩÇï\ǵNjÇ∑ÅBDZÇÃÉRÅ[ÉãÉoÉbÉNÇ™ eofErr ÉGÉâÅ[Çï‘Ç∑èÍçáÇÕÅAÉtÉ@ÉCÉãÇÃññîˆÇ…íBÇ∑ÇÈÇ‹Ç≈Ç…âΩÉoÉCÉgǩǙÉoÉbÉtÉ@Ç…ì«Ç›çûÇ‹ÇÍÇΩâ¬î\ê´Ç™Ç†ÇÈÇΩÇflÅAïKÇ∏ *ioSize Ç…äiî[Ç≥ÇÍǃǢÇÈílÇÉ`ÉFÉbÉNǵǃÇ≠ÇæÇ≥Ç¢ÅBCallIADocumentAccessorRead ÇåƒÇ—èoÇ∑ÇΔÅAÉtÉ@ÉCÉãÇÃì«Ç›çûÇ›à íuÇÕì«Ç›çûÇ‹ÇÍÇΩÉoÉCÉgÇÃíºå„Ç‹Ç≈à⁄ìÆÇµÇ‹Ç∑ÅBéüÇ… CallIADocumentAccessorRead ÇåƒÇ—èoÇ∑ÇΔÅAíºëOÇÃì«Ç›çûǛǙèIóπǵÇΩà íuÇ©ÇÁéüÇÃì«Ç›çûǛǙäJénÇ≥ÇÍÇ‹Ç∑ÅB

CallIASetDocumentAccessorReadPosition

OSStatus CallIASetDocumentAccessorReadPosition(
        IADocAccessorRef inAccessor,
        SInt32 inMode,
        SInt32 inOffset);
                  

inAccessor -- IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ IADocAccessorRecord Ç÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅAinAccessor ÇÕÉIÅ[ÉvÉìÇ≥ÇÍÇΩèÛë‘Ç…Ç»Ç¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

inMode -- éüÇÃà íuåàÇflíËêîÇÃÇ¢Ç∏ÇÍÇ©Çä‹Ç›Ç‹Ç∑ÅB

  • kIAFromStartMode -- inOffset Ç…ÇÕÉtÉ@ÉCÉãÇÃêÊì™Ç©ÇÁÇÃÉIÉtÉZÉbÉgÇΔâéflÇ≥ÇÍÇÈílÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB
  • kIAFromCurrMode -- inOffset Ç…ÇÕåªç›ÇÃì«Ç›çûÇ›à íuÇ©ÇÁÇÃÉIÉtÉZÉbÉgÇΔâéflÇ≥ÇÍÇÈílÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB
  • kIAFromEndMode -- inOffset Ç…ÇÕÉtÉ@ÉCÉãÇÃññîˆÇ©ÇÁÇÃÉIÉtÉZÉbÉgÇΔâéflÇ≥ÇÍÇÈílÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB

inOffset -- ì«Ç›çûÇ›à íuÇÃÉIÉtÉZÉbÉgÇéwíËÇ∑ÇÈÇΩÇflÇ…égópÇ≥ÇÍÇÈïÑçÜǻǵ 32 ÉrÉbÉgêÆêîÇä‹Ç›Ç‹Ç∑ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


CallIASetDocumentAccessorReadPosition ÇÕÅAIADocAccessorRecord ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅACallIADocumentAccessorRead Ç™åƒÇ—èoÇ≥ÇÍÇΩÇΔÇ´Ç…éüÇÃì«Ç›çûÇ›Ççsǧà íuÇê›íËÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

CallIASetDocumentAccessorReadPosition ÇÕÅAéüÇà CallIADocumentAccessorRead Ç™ÉtÉ@ÉCÉãÇÃì«Ç›çûÇ›ÇäJénÇ∑ÇÈà íuÇê›íËÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBÉtÉ@ÉCÉãÇ™ÇÕÇ∂ÇflǃÉIÅ[ÉvÉìÇ≥ÇÍÇÈÇΔÇ´ÅAǪÇÃì«Ç›çûÇ›à íuÇÕÉtÉ@ÉCÉãÇÃêÊì™Ç…ê›íËÇ≥ÇÍǃǢNjÇ∑ÅB

CallIAGetDocumentAccessorReadPosition

OSStatus CallIAGetDocumentAccessorReadPosition(
        IADocAccessorRef inAccessor,
        SInt32* outPostion);
                  

inAccessor -- IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ IADocAccessorRecord Ç÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅAinAccessor ÇÕÉIÅ[ÉvÉìÇ≥ÇÍÇΩèÛë‘Ç…Ç»Ç¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

outPosition -- ÉtÉ@ÉCÉãÇÃêÊì™Ç©ÇÁåªç›ÇÃì«Ç›çûÇ›à íuÇ‹Ç≈ÇÃÉIÉtÉZÉbÉgÇ…ëäìñÇ∑ÇÈ 32 ÉrÉbÉgílÇ÷ÇÃÉ|ÉCÉìÉ^ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


CallIAGetDocumentAccessorReadPosition ÇÕÅAIADocAccessorRecord ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅACallIADocumentAccessorRead Ç™åƒÇ—èoÇ≥ÇÍÇΩÇΔÇ´Ç…éüÇÃì«Ç›çûÇ›Ççsǧà íuÇéÊìæÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

CallIAGetDocumentAccessorReadPosition ÇÕÅAéüÇÃì«Ç›çûÇ›ëÄçÏÇ™çsÇÌÇÍÇÈà íuÇ *outPosition Ç…ï‘ǵNjÇ∑ÅBï‘Ç≥ÇÍÇΩílÇÕÉtÉ@ÉCÉãÇÃêÊì™Ç©ÇÁÇÃÉIÉtÉZÉbÉgÇ≈Ç∑ÅB

CallIAGetDocumentAccessorEOF

OSStatus CallIAGetDocumentAccessorEOF(
        IADocAccessorRef inAccessor,
        SInt32* outEOF);
                  

inAccessor -- IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ IADocAccessorRecord Ç÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅAinAccessor ÇÕÉIÅ[ÉvÉìÇ≥ÇÍÇΩèÛë‘Ç…Ç»Ç¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

outEOF -- ÉtÉ@ÉCÉãÇ…ä‹Ç‹ÇÍÇÈÉoÉCÉgêîÇ…ëäìñÇ∑ÇÈ 32 ÉrÉbÉgílÇ÷ÇÃÉ|ÉCÉìÉ^ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


CallIAGetDocumentAccessorEOF ÇÕÅAIADocAccessorRecord ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅAì¸óÕÉtÉ@ÉCÉãÇÃí∑Ç≥ÇéÊìæÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB

CallIAGetDocumentAccessorEOF ÇÕÉtÉ@ÉCÉãÇÃí∑Ç≥ÇåüèoÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBílÇ™ï‘Ç≥ÇÍÇÈÇΔÇ´ÅA*outEOF ÇÃílÇÕÉtÉ@ÉCÉãÇ…ä‹Ç‹ÇÍÇÈëçÉoÉCÉgêîÇ…ê›íËÇ≥ÇÍÇ‹Ç∑ÅB

ìΔé©ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìì‡ïîÇ©ÇÁ Text Extractor ÉvÉâÉOÉCÉìÇåƒÇ—èoǪǧÇΔÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÉxÉçÉbÉpÇÕÅAé©ï™é©êgÇ≈DZÇÃç\ë¢ëÃÇèâä˙âªÇµÇƒÅAïKóvÇ»ÉRÅ[ÉãÉoÉbÉNÇíËã`Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBIADocAccessorRecord ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉvï˚ñ@Çé¶Ç∑ÉTÉìÉvÉãDžǬǢǃÇÕÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃå„îºÇ…džÇÈÅuIADocAccessorRecord ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉvÅvÇÃÉZÉNÉVÉáÉìÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

Å@

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ




Text Extractor Ç™íËã`Ç∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`Éì

DZÇÃÉZÉNÉVÉáÉìÇ≈ÇÕÅAÇ∑Ç◊ǃÇà Text Extractor ÉvÉâÉOÉCÉìÇ…ÇÊǡǃÉGÉNÉXÉ|Å[ÉgÇ≥ÇÍÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìDžǬǢǃê‡ñæÇµÇ‹Ç∑ÅBDZÇÃÉZÉNÉVÉáÉìÇ≈ÇÕÅAǪÇÍǺÇÍÇÃÉãÅ[É`ÉìÇÃè⁄ç◊Ç»ê‡ñæÇΔdžÇÌÇπǃÅAǪÇÍǺÇÍÇÃÉãÅ[É`ÉìÇ…ä÷òAÇ∑ÇÈèdóvéñçÄLJé¶ÇµÇ‹Ç∑ÅB



IAPluginInit

OSStatus IAPluginInit(
        IAPluginInitBlockPtr initBlock, 
        IAPluginRef *outPluginRef);
                  

initBlock -- IAPluginInitBlock ç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^ÅB

outPluginRef -- ÉvÉâÉOÉCÉìÇ™ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈÇΔÇ´Ç…ÅAëºÇÃÉvÉâÉOÉCÉìÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇÈ 32 ÉrÉbÉgílÇ÷ÇÃÉ|ÉCÉìÉ^ÅBÉvÉâÉOÉCÉìÇÕDZÇÃílÇǪÇà IAPluginInit ÉãÅ[É`ÉìÇ…ê›íËǵNjÇ∑ÅBIAPluginTerm Ç™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈DZÇÃílÇÕïœÇÌÇÈDZÇΔÇ»Ç≠ǪÇÃNjNjï€éùÇ≥ÇÍÇ‹Ç∑ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


IAPluginInit ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB

ÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇ™é¿çsÇÃèÄîıÇêÆÇ¶ÇΩå„ÅAÉvÉâÉOÉCÉìÇà IAPluginInit ÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉãÅ[É`ÉìÇÕÅAÉvÉâÉOÉCÉìÇ™ïKóvÇ»èâä˙âªëÄçÏÇé¿çsÇ≈Ç´ÇÈÇÊǧDžǵNjÇ∑ÅB

initBlock ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈ IAPluginInitBlock ì‡ÇÃÉRÅ[ÉãÉoÉbÉNÇÕÅAÉvÉâÉOÉCÉìÇ™ÉIÅ[ÉvÉìǵǃǢÇÈä‘ (IAPluginTerm Ç™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈) óLå¯Ç≈džÇËë±ÇØÅAÉvÉâÉOÉCÉìÇÃëºÇÃÉãÅ[É`ÉìÇ©ÇÁåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB*outPluginRef Ç…äiî[Ç≥ÇÍÇÈílÇÕÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÅAÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵÇÃä‘Ç…ïœâªÇπÇ∏DžǪÇÃNjNjï€éùÇ≥ÇÍÇÈéùë±ìIÇ»ÉXÉeÅ[É^ÉXèÓïÒÇäiî[Ç∑ÇÈÇΩÇflÇ…égópÇ≥ÇÍÇÈDZÇΔǙdžÇËÇ‹Ç∑ (DZÇÃílÇÕÉvÉâÉOÉCÉìÇ™ÉNÉçÅ[ÉYǵÇΩå„Ç…ÇÕï€ë∂Ç≥ÇÍÇ‹ÇπÇÒ)ÅB

DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg 6ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IAPluginTerm

OSStatus IAPluginTerm(IAPluginRef inPluginRef);
                  

inPluginRef -- ÉvÉâÉOÉCÉìÇ™égópÇ∑ÇÈ 32 ÉrÉbÉgílÅBDZÇÃílÇÕÅAIAPluginInit åƒÇ—èoǵÇ≈ *outPluginRef ÉpÉâÉÅÅ[É^Ç…ê›íËÇ≥ÇÍÇΩílÇΔìØÇ∂Ç≈Ç∑ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


IAPluginTerm ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB

ÉvÉâÉOÉCÉìÇà Code Fragment Manager ÇΔÇÃê⁄ë±Ç™ÉNÉçÅ[ÉYÇ∑ÇÈëOÇ…ÅAÉvÉâÉOÉCÉìÇà IAPluginTerm ÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉãÅ[É`ÉìÇÕÅAÉvÉâÉOÉCÉìÇ™ÉÅÉÇÉäÇÃäÑÇËìñǃâèúÅAÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇÃÉNÉçÅ[ÉYǻǫÇÃÅAïKóvÇ»ÉNÉäÅ[ÉìÉAÉbÉvëÄçÏÇé¿çsÇ≈Ç´ÇÈÇÊǧDžǵNjÇ∑ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÅAéüÇà IAPluginInit åƒÇ—èoǵDžÇÊǡǃÉvÉâÉOÉCÉìÇ™çƒìxÉIÅ[ÉvÉìÇ≥ÇÍÇÈÇ‹Ç≈ÅAÉvÉâÉOÉCÉìÇÃëºÇÃåƒÇ—èoǵÇÕçsÇÌÇÍÇ»Ç≠Ç»ÇËÇ‹Ç∑ÅB

DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg 7ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IAGetExtractorVersion

OSStatus IAGetExtractorVersion(
        IAPluginRef inPluginRef,
        UInt32 outPluginVersion);
                  

inPluginRef -- ÉvÉâÉOÉCÉìÇ™égópÇ∑ÇÈ 32 ÉrÉbÉgílÅBDZÇÃílÇÕÅAIAPluginInit åƒÇ—èoǵÇ≈ *outPluginRef ÉpÉâÉÅÅ[É^Ç…ê›íËÇ≥ÇÍÇΩílÇΔìØÇ∂Ç≈Ç∑ÅB

outPluginVersion -- 32 ÉrÉbÉgílÇ÷ÇÃÉ|ÉCÉìÉ^ÅBçÏê¨Ç∑ÇÈÉãÅ[É`ÉìÇ≈ÇÕÅADZÇÃílÇ… kIAExtractorCurrentVersion Çê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


IAGetExtractorVersion ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB

DZÇÃÉãÅ[É`ÉìÇÃíÜÇ≈ÅAÉvÉâÉOÉCÉìÇÕ *outPluginVersion ÇÃílDžǪÇÃÉRÉìÉpÉCÉãÇ…égópǵÇΩ Text Extractor ÉvÉâÉOÉCÉìÉCÉìÉ^ÉtÉFÅ[ÉXÇÃÉoÅ[ÉWÉáÉìÇê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÅuIAExtractor.hÅvÇ≈íËã`Ç≥ÇÍǃǢÇÈ kIAExtractorCurrentVersion íËêîÇ…ÇÕÅAText Extractor ÉvÉâÉOÉCÉìÉCÉìÉ^ÉtÉFÅ[ÉXÇÃåªç›ÇÃÉoÅ[ÉWÉáÉìÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB

DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg 8ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IACountSupportedDocTypes

OSStatus IACountSupportedDocTypes(
        IAPluginRef inPluginRef, 
        UInt32* outCount);
                  

inPluginRef -- ÉvÉâÉOÉCÉìÇ™égópÇ∑ÇÈ 32 ÉrÉbÉgílÅBDZÇÃílÇÕÅAIAPluginInit åƒÇ—èoǵÇ≈ *outPluginRef ÉpÉâÉÅÅ[É^Ç…ê›íËÇ≥ÇÍÇΩílÇΔìØÇ∂Ç≈Ç∑ÅB

outCount -- 32 ÉrÉbÉgêÆêîÇ÷ÇÃÉ|ÉCÉìÉ^ÅBÉvÉâÉOÉCÉìÇÕÅADZÇÃêÆêîDžǪÇÍÇ™èàóùÇ≈Ç´ÇÈèëófiÉ^ÉCÉvÇÃêîÇê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


IACountSupportedDocTypes ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB

DZÇÃÉãÅ[É`ÉìÇ≈ÇÕÅA*outCount Ç…ÉvÉâÉOÉCÉìÇ™èàóùÇ≈Ç´ÇÈèëófiÉ^ÉCÉvÇÃêîÇê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB*outCount Ç…äiî[Ç≥ÇÍÇÈílÇÕÅAIAGetIndSupportedDocType åƒÇ—èoǵÇÃÉCÉìÉfÉbÉNÉXÇΔǵǃéwíËÇ≈Ç´ÇÈÅAóLå¯Ç»ÉCÉìÉfÉbÉNÉXÇÃç≈ëÂílÇΔâéflÇ≥ÇÍÇ‹Ç∑ÅB

DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg 9ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IAGetIndSupportedDocType

OSStatus IAGetIndSupportedDocType(
        IAPluginRef inPluginRef, 
        UInt32 inIndex,
        char** outMIMEType);
                  

inPluginRef -- ÉvÉâÉOÉCÉìÇ™égópÇ∑ÇÈ 32 ÉrÉbÉgílÅBDZÇÃílÇÕÅAIAPluginInit åƒÇ—èoǵÇ≈ *outPluginRef ÉpÉâÉÅÅ[É^Ç…ê›íËÇ≥ÇÍÇΩílÇΔìØÇ∂Ç≈Ç∑ÅB

inIndex -- ï‘Ç≥ÇÍÇÈèëófiÉ^ÉCÉvÇÃÉCÉìÉfÉbÉNÉXÇéwíËÇ∑ÇÈ 32 ÉrÉbÉgêÆêîÅBÉCÉìÉfÉbÉNÉXílÇÃîÕàÕÇÕÅA1 Ç©ÇÁ IACountSupportedDocTypes Ç…ÇÊǡǃï‘Ç≥ÇÍÇΩç≈ëÂÇÃÉCÉìÉfÉbÉNÉXílÇ‹Ç≈Ç≈Ç∑ÅB

*outMIMEType -- char* å^ÇÃÉ|ÉCÉìÉ^ílÅBÉvÉâÉOÉCÉìÇÕDZÇÃílÇê›íËǵǃÅAMIME É^ÉCÉvï∂éöóÒÇä‹Çfiï∂éöóÒÇÉ|ÉCÉìÉgÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃï∂éöóÒÇ™êËóLÇ∑ÇÈÉÅÉÇÉäóÃàÊÇÕÉvÉâÉOÉCÉìÇ…ëÆÇµÇ‹Ç∑ÅBǵÇΩǙǡǃÅADZÇÃÉÅÉÇÉäóÃàÊÇ™ÉvÉâÉOÉCÉìÇ…ÇÊǡǃäÑÇËìñǃÇÁÇÍÇΩèÍçáÅAǪÇÃäÑÇËìñǃâèúLJÉvÉâÉOÉCÉìÇ™çsÇÌÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


IAGetIndSupportedDocType ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB

IAGetIndSupportedDocType ÉãÅ[É`ÉìÇÕ *outMIMEType Çê›íËǵǃÅAÉvÉâÉOÉCÉìÇ™îFéØÇ≈Ç´ÇÈ n î‘ñ⁄Çà MIME É^ÉCÉvÇä‹Çfiï∂éöóÒÇÉ|ÉCÉìÉgǵNjÇ∑ÅBinIndex ÉpÉâÉÅÅ[É^Ç≈éwíËÇ≈Ç´ÇÈÉCÉìÉfÉbÉNÉXílÇÕÅA1 (0 Ç≈ÇÕÇ»Ç≠) Ç©ÇÁ IACountSupportedDocTypes åƒÇ—èoǵDžÇÊǡǃï‘Ç≥ÇÍÇÈç≈ëÂílÇ‹Ç≈ÇÃîÕàÕÇ≈Ç∑ÅB

DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg 10ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IAOpenDocument

OSStatus IAOpenDocument(
        IAPluginRef inPluginRef, 
        IADocAccessorPtr inAccessor, 
        IADocRef* outDoc);
                  

inPluginRef -- ÉvÉâÉOÉCÉìÇ™égópÇ∑ÇÈ 32 ÉrÉbÉgílÅBDZÇÃílÇÕÅAIAPluginInit åƒÇ—èoǵÇ≈ *outPluginRef ÉpÉâÉÅÅ[É^Ç…ê›íËÇ≥ÇÍÇΩílÇΔìØÇ∂Ç≈Ç∑ÅB

inAccessor -- ÉtÉ@ÉCÉãÇ©ÇÁèÓïÒÇì«Ç›çûÇfiÇΩÇflÇ…ïKóvÇ»ÉRÅ[ÉãÉoÉbÉNÇä‹ÇÒÇæ IAPluginInitBlock Ç÷ÇÃÉ|ÉCÉìÉ^ÅB

outDoc -- ÉvÉâÉOÉCÉìÇ™èëófiÇ…å≈óLÇÃèÓïÒÇäiî[Ç∑ÇÈÇΩÇflÇ…égópÇ≈Ç´ÇÈ 32 ÉrÉbÉgílÇ÷ÇÃÉ|ÉCÉìÉ^ÅBí èÌÅAÉvÉâÉOÉCÉìÇÕèëófiÇ…å≈óLÇÃÉXÉeÅ[É^ÉXïœêîÇ÷ÇÃÉ|ÉCÉìÉ^ÇDZÇÃÉpÉâÉÅÅ[É^Ç…äiî[ǵNjÇ∑ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


IAOpenDocument ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB

IAOpenDocument ÇÕÅAÉvÉâÉOÉCÉìÇ™êVǵǢèëófiÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoÇ∑ÇΩÇflÇ…égópÇ≥ÇÍÇÈëOÇ…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉãÅ[É`ÉìÇÕÅAÉvÉâÉOÉCÉìÇ™ÉtÉ@ÉCÉãÇ©ÇÁÉeÉLÉXÉgÇÃì«Ç›çûÇ›ÇäJénÇ∑ÇÈëOÇ…ïKóvÇΔÇ»ÇÈèâä˙âªëÄçÏÇé¿çsÇ≈Ç´ÇÈÇÊǧDžǵNjÇ∑ÅBÉtÉ@ÉCÉãÇÃèàóùÇ…ïKóvÇ»ÉXÉeÅ[É^ÉXïœêîÇ‹ÇΩÇÕÉfÅ[É^ÉoÉbÉtÉ@ÇÕÉÅÉÇÉäÉuÉçÉbÉNÇÃíÜÇ…äiî[Ç≥ÇÍÇÈïKóvǙdžÇËÅAǪÇÃÉuÉçÉbÉNÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕ *outDoc ÇÃíÜÇ…äiî[Ç≥ÇÍÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃílÇÕÅAèëófiÇ™ÉIÅ[ÉvÉìǵǃǢÇÈÇΔÇ´Ç… IAGetNextTextRun Ç‹ÇΩÇÕ IAGetTextRunInfo ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÅAïKóvÇ»ÉeÉLÉXÉgÇ™èëófiÇ©ÇÁÇ∑Ç◊ǃéÊÇËèoÇ≥ÇÍÇΩå„Ç≈ IACloseDocument Ç…ìnÇ≥ÇÍÇ‹Ç∑ÅBinAccessor ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈ IAPluginInitBlock ÇΔ *outDoc Ç…äiî[Ç≥ÇÍǃǢÇÈílÇÕóºï˚ÇΔLJÅAIACloseDocument Ç™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈óLå¯Ç≈Ç∑ÅB

DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg 11ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IACloseDocument

OSStatus IACloseDocument(
        IADocRef inDoc);
                  

inDoc -- ÉvÉâÉOÉCÉìÇà IAOpenDocument åƒÇ—èoǵDžÇÊǡǃçÏê¨Ç≥ÇÍÇΩèëófiéQèΔílÇ≈ÅAÉtÉ@ÉCÉãÇÃèàóùÇ…ïKóvÇ»ÉXÉeÅ[É^ÉXïœêîÇ‹ÇΩÇÕÉfÅ[É^ÉoÉbÉtÉ@Ç÷ÇÃÉ|ÉCÉìÉ^Çä‹Ç›Ç‹Ç∑ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


IACloseDocument ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB

IACloseDocument ÇÕïKóvÇ»ÉeÉLÉXÉgèÓïÒÇ™Ç∑Ç◊ǃèëófiÇ©ÇÁéÊÇËèoÇ≥ÇÍÇΩå„Ç≈åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃåƒÇ—èoǵÇ≈ÅAÉvÉâÉOÉCÉìÇÕÅAÉtÉ@ÉCÉãÇèàóùÇ∑ÇÈÇΩÇflÇ…çÏê¨Ç≥ÇÍÅAinDoc ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃéQèΔÇ≥ÇÍÇÈÉXÉeÅ[É^ÉXïœêîÇ‹ÇΩÇÕÉoÉbÉtÉ@Çîjä¸Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB

DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg 12ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IAGetNextTextRun

OSStatus IAGetNextTextRun(
        IADocRef inDoc,
        void* buffer,
        UInt32* ioSize);
                  

inDoc -- ÉvÉâÉOÉCÉìÇà IAOpenDocument åƒÇ—èoǵDžÇÊǡǃçÏê¨Ç≥ÇÍÇΩèëófiéQèΔílÇ≈ÅAÉtÉ@ÉCÉãÇÃèàóùÇ…ïKóvÇ»ÉXÉeÅ[É^ÉXïœêîÇ‹ÇΩÇÕÉfÅ[É^ÉoÉbÉtÉ@Ç÷ÇÃÉ|ÉCÉìÉ^Çä‹Ç›Ç‹Ç∑ÅB

buffer -- ÉÅÉÇÉäÉuÉçÉbÉNÇ÷ÇÃÉ|ÉCÉìÉ^ÅB

ioSize -- 32 ÉrÉbÉgêÆêîílÇ÷ÇÃÉ|ÉCÉìÉ^ÅBÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅADZÇÃílÇÕ buffer ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈÉÅÉÇÉäóÃàÊÇ≈égópâ¬î\Ç»ÉoÉCÉgêîÇΔìôǵǢílÇ≈Ç∑ÅBÉeÉLÉXÉgÇDZÇÃÉÅÉÇÉäÉoÉbÉtÉ@Ç…ÉRÉsÅ[ǵÇΩå„ÅAÉvÉâÉOÉCÉìÇÕDZÇÃílÇ…ÉRÉsÅ[Ç≥ÇÍÇΩé¿ç€ÇÃÉoÉCÉgêîÇê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


IAGetNextTextRun ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB

IAGetNextTextRun ÉãÅ[É`ÉìÇÕÅAÉÅÉÇÉäÉoÉbÉtÉ@ǙǢǡǜǢDžǻÇÈÇ©ÅAéÊÇËèoÇ∑ÉeÉLÉXÉgǙǻÇ≠Ç»ÇÈÇ‹Ç≈ÅAèëófiÇ©ÇÁ buffer ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈÉÅÉÇÉäÉoÉbÉtÉ@Ç…ÉeÉLÉXÉgÇÉRÉsÅ[Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÉeÉLÉXÉgÇÃÉfÉRÅ[ÉhíÜÇ…åæåÍÉGÉìÉRÅ[ÉfÉBÉìÉOǙdžÇÈåæåÍÇ©ÇÁï ÇÃåæåÍÇ…ïœçXÇ≥ÇÍÇÈÇΔÅAÉvÉâÉOÉCÉìÇÕåãâ ÉRÅ[Éh errIAEndOfTextRun Çï‘Ç∑DZÇΔÇ≈ÅAÉeÉLÉXÉgÉXÉgÉäÅ[ÉÄì‡Ç…ǪÇÃà íuÇÉ}Å[ÉLÉìÉOǵNjÇ∑ÅB

DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅu#IAGetNextTextRunExampleÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IAGetTextRunInfo

OSStatus IAGetTextRunInfo(
        IADocRef inDoc,
        char** outEncoding,
        char** outLanguage);
                  

inDoc -- ÉvÉâÉOÉCÉìÇà IAOpenDocument åƒÇ—èoǵDžÇÊǡǃçÏê¨Ç≥ÇÍÇΩèëófiéQèΔílÇ≈ÅAÉtÉ@ÉCÉãÇÃèàóùÇ…ïKóvÇ»ÉXÉeÅ[É^ÉXïœêîÇ‹ÇΩÇÕÉfÅ[É^ÉoÉbÉtÉ@Ç÷ÇÃÉ|ÉCÉìÉ^Çä‹Ç›Ç‹Ç∑ÅB

outEncoding -- char* å^ÇÃïœêîÇ÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÍÇÕè»ó™â¬î\Ç»ÉpÉâÉÅÅ[É^Ç≈ÅAåƒÇ—èoǵå≥ǙDZÇÃílÇïKóvÇΔǵǻǢèÍçáÇÕ NULL Çê›íËǵǃLJǩNjǢNjÇπÇÒÅBÉvÉâÉOÉCÉìÇÕÅADZÇÃÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇΩïœêîÇ…ä‹Ç‹ÇÍÇÈï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^Çäiî[Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃï∂éöóÒÇ…ÇÕÅAÉtÉ@ÉCÉãÇ©ÇÁéÊÇËèoÇ≥ÇÍÇÈÉeÉLÉXÉgÇÃåªç›ÇÃï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇ…ëŒâûÇ∑ÇÈÉCÉìÉ^Å[ÉlÉbÉgñºÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB

outLanguage -- char* å^ÇÃïœêîÇ÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÍÇÕè»ó™â¬î\Ç»ÉpÉâÉÅÅ[É^Ç≈ÅAåƒÇ—èoǵå≥ǙDZÇÃílÇïKóvÇΔǵǻǢèÍçáÇÕ NULL Çê›íËǵǃLJǩNjǢNjÇπÇÒÅBÉvÉâÉOÉCÉìÇÕÅADZÇÃÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇΩïœêîÇ…ä‹Ç‹ÇÍÇÈï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^Çäiî[Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃï∂éöóÒÇ…ÇÕÅAÉtÉ@ÉCÉãÇ©ÇÁéÊÇËèoÇ≥ÇÍÇÈÉeÉLÉXÉgÇÃåæåÍñºÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅBåæåÍÇÕ ISO-639 Ç≈íËã`Ç≥ÇÍǃǢÇÈÉCÉìÉ^Å[ÉlÉbÉgïWèÄÇ…èÄãíǵNjÇ∑ÅB

result -- èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB


IAGetTextRunInfo ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB

IAGetTextRunInfo ÇÕÅAIAGetNextTextRun Ç…ÇÊǡǃï‘Ç≥ÇÍÇΩç≈êVÇÃÉoÉbÉtÉ@ÇÃï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇΔåæåÍÇ…ä÷Ç∑ÇÈèÓïÒÇéÊìæÇµÇ‹Ç∑ÅB

2 ǬÇÃÉpÉâÉÅÅ[É^ÇÕè»ó™â¬î\Ç≈ÅAåƒÇ—èoǵå≥ÇÃÉäÉNÉGÉXÉgÇ…âûÇ∂ǃéwíËǵǃLJéwíËǵǻÇ≠ǃLJǩNjǢNjÇπÇÒÅBÉpÉâÉÅÅ[É^Ç™ïKóvÇΔǵǻǢèÍçáÇÕ NULL Ç™ê›íËÇ≥ÇÍÇ‹Ç∑ÅB

ÉvÉâÉOÉCÉìÇ™ï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^ÇäÑÇËìñǃÅAǪÇÃÉ|ÉCÉìÉ^Ç *outEncoding Ç‹ÇΩÇÕ *outLanguage Ç…äiî[ǵÇΩèÍçáÅAǪÇÃÉÅÉÇÉäóÃàÊÇÃäÑÇËìñǃÇâèúÇ∑ÇÈÇÃÇÕÉvÉâÉOÉCÉìÇÃê”îCÇ≈Ç∑ÅB

Ç¢Ç∏ÇÍÇ©ÇÃílÇîFéØÇ≈ǴǻǢèÍçáÅAÉvÉâÉOÉCÉìÇÕ *outEncoding Ç‹ÇΩÇÕ *outLanguage ÇÃílÇΔǵǃ NULL Çäiî[ǵNjÇ∑ÅBDZÇÃílÇÕÅAÉvÉâÉOÉCÉìÇ™åªç›ÇÃï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇ‹ÇΩÇÕåæåÍÇîFéØÇ≈ǴǻǢDZÇΔÇåƒÇ—èoǵå≥Ç…í ímǵNjÇ∑ÅB

ï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇ…ëŒâûÇ∑ÇÈÉCÉìÉ^Å[ÉlÉbÉgñºÇä‹ÇÒÇæï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕ *outEncoding ÉpÉâÉÅÅ[É^Ç…ï‘Ç≥ÇÍÇ‹Ç∑ÅBï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇ…ëŒâûÇ∑ÇÈÉCÉìÉ^Å[ÉlÉbÉgñºÇΔÇÕÅAÅuiso-8859-1ÅvÅAÅux-mac-romanÅvÅAÅueuc-jpÅvǻǫÇÃDZÇΔÇ≈Ç∑ÅB

DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg 14ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ




ÉTÉìÉvÉãÉvÉâÉOÉCÉì

à»â∫ÇÃè⁄ç◊Ç»ÉRÉÅÉìÉgÇä‹ÇfiÉTÉìÉvÉãÇÕÅAÅutext/plainÅvMIME É^ÉCÉvÇ…ëŒâûǵÇΩ Text Extractor ÉvÉâÉOÉCÉìÇçÏê¨Ç∑ÇÈï˚ñ@ǬǢǃãÔëÃìIÇ…ê‡ñæÇµÇ‹Ç∑ÅBDZÇÃÉvÉâÉOÉCÉìÇÃã@î\ÇÕÉtÉ@ÉCÉãÇ©ÇÁéÊÇËèoǵÇΩÉeÉLÉXÉgÇåƒÇ—èoǵå≥Ç…ìnÇ∑ÇΔǢǧDZÇΔÇ≈Ç∑Ç™ÅAǪÇÃÉCÉìÉvÉäÉÅÉìÉgÇÕîÒèÌÇ…óeà’Ç≈Ç∑ÅBÉfÉxÉçÉbÉpÇÕDZÇÃÉTÉìÉvÉãÇ…ä»íPÇ»èCê≥Çâ¡Ç¶ÇÈÇæÇØÇ≈ÅAìΔé©ÇÃÉtÉ@ÉCÉãÉtÉHÅ[É}ÉbÉgÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB


 /* ÉtÉ@ÉCÉã: PlainTextExtractor.c
                  
     Text Extractor ÉvÉâÉOÉCÉìÇÃÉTÉìÉvÉã/ÉVÉFÉã */
                  
 /* IAExtractor.h ÉtÉ@ÉCÉãÇ…ÇÕÅAText Extractor ÉvÉâÉOÉCÉìÇÃçÏ
  ê¨Ç…ïKóvÇ»íËã`ÇΔç\ë¢ëÃÇ™ä‹Ç‹ÇÍǃǢÇÈ */
                  
 #include "IAExtractor.h"
                  
                  
 /* éüÇÃíËêîÇÕÅAÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵå≥Ç™ï€éÁÇ∑ÇÈéQèΔílÇ…äiî[Ç≥
  ÇÍÇΩÉfÅ[É^ílÇΔǵǃÅADZÇÃÉTÉìÉvÉãÇÃíÜÇ≈égópÇ≥ÇÍÇÈÅBDZÇÃíËêîÇÕ
  ÉvÉâÉOÉCÉìÇÃçÏê¨Ç…ïKÇ∏ǵLJïKóvÇΔǵǻǢǙÅAê‡ñæÇóeà’Ç…Ç∑ÇÈÇΩ
  ÇflÇ…ñÇ…óßǬ */
 enum {
     kPlainTextExtractorRefType = 'text'
 };
                  
 /* éüÇÃÉ}ÉNÉçÇÕÅAéQèΔílÇ™ÉTÉìÉvÉãì‡Ç≈ïœçXÇ≥ÇÍÇÈDZÇΔÇ»Ç≠ǪÇÃÇ‹
  Ç‹ï€éùÇ≥ÇÍǃǢÇÈDZÇΔÇåüèÿÇ∑ÇÈÇΩÇflÇ…égópÇ≥ÇÍÇÈ */
                  
 #define VerifyType(x) ((UInt32)(x)==(UInt32)kPlainTextExtractorRefType)
                  

 
ÉäÉXÉg 5 Text Extractor ÉvÉâÉOÉCÉìÇÃÉtÉ@ÉCÉãÉwÉbÉ_Ç®ÇÊÇ—ÉCÉìÉ|Å[Ég

è„ãLÇÃÉTÉìÉvÉãÉäÉXÉgÇ≈ÇΩÇæ 1 ǬÇÃèdóvÇ»ë§ñ ÇÕÅAÉwÉbÉ_ÉtÉ@ÉCÉãÇ™ÉCÉìÉNÉãÅ[ÉhÇ≥ÇÍÇÈÇΔǢǧDZÇΔÇ≈Ç∑ÅBDZDZÇ≈ÇÕÅAïKóvÇ»íËêîÇΔç\ë¢ëÃÇÃíËã`Çä‹ÇfiÅuIAExtractor.hÅvÉtÉ@ÉCÉãÇ™ÉCÉìÉNÉãÅ[ÉhÇ≥ÇÍÇ‹Ç∑ÅB


                  
/* IAPluginInit ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
                  
 OSStatus IAPluginInit(
         IAPluginInitBlockPtr initBlock,
         IAPluginRef* outPluginRef) {
                  
         /* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
                  
     if (outPluginRef == NULL) return errIAParamErr;
                  
         /* éQèΔílÇèâä˙âªÇ∑ÇÈÅBÉÅÉÇÉääÑÇËìñǃÇïKóvÇΔÇ∑ÇÈÉv
           ÉâÉOÉCÉìÇÕÅADZDZÇ≈ initBlock ÇÃèÓïÒÇÉLÉÉÉbÉVÉÖÇ…äiî[
           Ç∑ÇÈïKóvǙdžÇÈ */
                  
     *outPluginRef = (IAPluginRef)kPlainTextExtractorRefType;
                  
         /* ÉmÅ[ÉGÉâÅ[Çï‘Ç∑ */
                  
     return errIANoErr;
 }

 
ÉäÉXÉg 6 IAPluginInit ÇÃÉTÉìÉvÉã

IAPluginInit ÇÕÉvÉâÉOÉCÉìÇ…â¡Ç¶ÇÁÇÍÇÈç≈èâÇÃåƒÇ—èoǵÇ≈Ç∑ÅBDZÇÃåƒÇ—èoǵÇÃä‘Ç…ÅAÉvÉâÉOÉCÉìÇÕïKóvÇ»ïœêîÇ‹ÇΩÇÕÉeÅ[ÉuÉãÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAé¿çsíÜÇÃÉvÉâÉOÉCÉìÇ™ initBlock ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈ IAPluginInitBlock ÇÃÉRÅ[ÉãÉoÉbÉNÇǪÇÃå„ÅAïKóvÇΔÇ∑ÇÈèÍçáÇÕÅADZÇÃÉ|ÉCÉìÉ^ÇÃÉRÉsÅ[Çï€ë∂Ç∑ÇÈDZÇΔLJïKóvÇ≈Ç∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


                  
 /* IAPluginTerm ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
                  
 OSStatus IAPluginTerm(IAPluginRef inPluginRef) {
                  
         /* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
                  
     if (!VerifyType(inPluginRef))
         return errIAParamErr;
                  
         /* DZDZÇ≈ǪÇÃëºÇÃîjä¸ëÄçÏÇé¿çsÇ∑ÇÈ... */
                  
     ....
                  
         /* ÉmÅ[ÉGÉâÅ[Çï‘Ç∑ */
                  
     return errIANoErr;
 }
                  

 
ÉäÉXÉg 7 IAPluginTerm ÇÃÉTÉìÉvÉã

í èÌÅAIAPluginTerm ÉãÅ[É`ÉìÇÕÅAÉvÉâÉOÉCÉìÇ…ÇÊǡǃäÑÇËìñǃÇÁÇÍÇΩÉÅÉÇÉäÇÃäÑÇËìñǃâèúÅAÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇÃÉNÉçÅ[ÉYÅAÇ®ÇÊÇ—é¿çsÇ∑ÇÈïKóvÇÃdžÇÈǪÇÃëºÇÃÉNÉäÅ[ÉìÉAÉbÉvÉ^ÉXÉNÇçsǧÇΩÇflÇ…égópÇ≥ÇÍÇ‹Ç∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


                  
 /* IAGetExtractorVersion ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
                  
 OSStatus IAGetExtractorVersion(
         IAPluginRef inPluginRef,
         UInt32* outPluginVersion) {
                  
         /* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
                  
     if (!VerifyType(inPluginRef) || !outPluginVersion )
         return errIAParamErr;
                  
         /* ñflÇËílÇ…ÅADZÇÃÉRÅ[ÉhÇÃÉRÉìÉpÉCÉãÇ…égópǵÇΩ
           ÉCÉìÉ^ÉtÉFÅ[ÉXÇÃÉoÅ[ÉWÉáÉìÇê›íËÇ∑ÇÈ */
                  
     *outPluginVersion = kIAExtractorCurrentVersion;
                  
         /* ÉmÅ[ÉGÉâÅ[Çï‘Ç∑ */
                  
     return errIANoErr;
 }

 
ÉäÉXÉg 8 IAGetExtractorVersion ÇÃÉTÉìÉvÉã

kIAExtractorCurrentVersion ílÇ…ÇÕÅAèÌÇ…ÅuIAExtractor.hÅvÉtÉ@ÉCÉãì‡ÇÃêÈåæÇ…ëŒâûÇ∑ÇÈåªç›ÇÃÉoÅ[ÉWÉáÉìÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅBåªç›ÇÃÉCÉìÉvÉäÉÅÉìÉeÅ[ÉVÉáÉìÇ≈ÇÕÅADZÇÃílÇÕ kIAExtractorVersion1 Ç…ê›íËÇ≥ÇÍǃǢNjÇ∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


                  
 /* IACountSupportedDocTypes ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
                  
 OSStatus IACountSupportedDocTypes(
         IAPluginRef inPluginRef,
         UInt32* outCount) {
                  
         /* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
                  
     if (!VerifyType(inPluginRef) || ! outCount)
         return errIAParamErr;
                  
         /* íËêîÇÕ IAGetIndSupportedDocType Ç…ÉCÉìÉfÉbÉNÉXÇΔǵǃìnÇ≥ÇÍÇÈç≈ëÂíl */
                  
     *outCount = 1;
                  
         /* ÉmÅ[ÉGÉâÅ[Çï‘Ç∑ */
                  
     return errIANoErr;
 }

 
ÉäÉXÉg 9 IACountSupportedDocTypes ÇÃÉTÉìÉvÉã

DZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAÇΩÇæ 1 ǬÇÃèëófiÉ^ÉCÉvÅAǬNjÇËÉvÉåÅ[ÉìÉeÉLÉXÉgèëófiÇæÇØÇ™ÉTÉ|Å[ÉgÇ≥ÇÍÇ‹Ç∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


                  
/* IAGetIndSupportedDocType ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
                  
 OSStatus IAGetIndSupportedDocType(
         IAPluginRef inPluginRef,
         UInt32 inIndex,
         char **outMIMEType) {
                  
         /* ÉçÅ[ÉJÉãïœêîÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈ */
                  
     static char* supportedDocType = "text/plain";
                  
         /* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
                  
     if (!VerifyType(inPluginRef) || !outMIMEType || inIndex != 1)
         return errIAParamErr;
                  
         /* ñflÇËílÇê›íËÇ∑ÇÈ */
                  
     *outMIMEType = supportedDocType;
                  
         /* èàóùÇê≥èÌÇ…èIóπÇ∑ÇÈ */
                  
     return errIANoErr;
 }

 
ÉäÉXÉg 10 IAGetIndSupportedDocType ÇÃÉTÉìÉvÉã

IAGetIndSupportedDocType ÇÃè„ãLÇÃêÈåæÇ≈ÇÕÅAMIME É^ÉCÉvï∂éöóÒÇÕÉvÉâÉOÉCÉìÇÃÉOÉçÅ[ÉoÉãÇÃíÜÇ…ÉXÉ^ÉeÉBÉbÉNïœêîÇΔǵǃäiî[Ç≥ÇÍǃǢNjÇ∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


                  
/* IAOpenDocument ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
                  
 OSStatus IAOpenDocument(
         IAPluginRef inPluginRef,
         IADocAccessorPtr inDocAccessor,
         IADocRef* outDoc) {
                  
         /* ÉçÅ[ÉJÉãïœêî */
                  
     OSStatus err;
                  
         /* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
                  
     if (!VerifyType(inPluginRef) || !inDocAccessor || !outDoc)
         return errIAParamErr;
                  
         /* ÉIÅ[ÉvÉjÉìÉOÉãÅ[É`ÉìÇåƒÇ—èoÇ∑ */
                  
     err = CallIADocumentAccessorOpen(inDocAccessor);
     if (err != errIANoErr)
         return err;
                  
         /* IADocRef ÇÕÉvÉâÉOÉCÉìÇ…ÇÊǡǃíËã`Ç≥ÇÍǃǢÇÈÅBDZÇÃÉTÉìÉvÉã
         Ç≈ÇÕÅAÉAÉNÉZÉbÉTÇ©ÇÁíºê⁄ìIÇ…ì«Ç›çûÇ›ÇçsǡǃǢÇÈÇæÇØÇ»ÇÃÇ≈ÅA
         IADocAccessorPtr ÇΔǢǧ IADocRef opaque ÉfÅ[É^å^ÇíËã`ǵǃǢ
         ÇÈ */
                  
     *outDoc = (IADocRef)inDocAccessor;
                  
         /* èàóùÇê≥èÌÇ…èIóπÇ∑ÇÈ */
                  
     return errIANoErr;
 }

 
ÉäÉXÉg 11 IAOpenDocument ÇÃÉTÉìÉvÉã

è„Ç…é¶ÇµÇΩ IAOpenDocument åƒÇ—èoǵÇ≈ÅAÉvÉâÉOÉCÉìÇÕÅAèëófiéQèΔÉpÉâÉÅÅ[É^ (*outDoc) Ç…ä‹Ç‹ÇÍÇÈ inDocAccessor ÇÃÉRÉsÅ[ÇÉLÉÉÉbÉVÉÖÇ…äiî[Ç∑ÇÈëOÇ…ÅAinDocAccessor ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈ IAPluginInitBlock ÉåÉRÅ[ÉhÇâÓǵǃÉRÅ[ÉãÉoÉbÉNÇçsǡǃǢNjÇ∑ÅBDZÇÃílÇÕÅAéüÇ…ë±Ç≠ÉTÉìÉvÉãÉäÉXÉgÇÃíÜÇ≈èëófiÇéQèΔÇ∑ÇÈÇΩÇflÇ…égópÇ≥ÇÍÇ‹Ç∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


                  
 /* IACloseDocument ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
                  
 OSStatus IACloseDocument(IADocRef inDoc) {
                  
         /* ÉçÅ[ÉJÉãïœêî */
                  
     IADocAccessorPtr    docAccessor;
     OSStatus            err;
                  
         /* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
                  
     if (inDoc == NULL)
         return errIAParamErr;
                  
         /* IADocRef Ç IAOpenDocument Ç≈íËã`ǵÇΩLJÇà (DZÇÃÉTÉìÉvÉãÇ≈
         ÇÕ IADocAccessorPtr) Ç…ÉLÉÉÉXÉgÇ∑ÇÈ */
                  
     docAccessor = (IADocAccessorPtr)inDoc;
                  
         /* ÉRÅ[ÉãÉoÉbÉNÇégǡǃÉtÉ@ÉCÉãÇÉNÉçÅ[ÉYÇ∑ÇÈ */
                  
     err = CallIADocumentAccessorClose(docAccessor);
                  
         /* ç≈å„ÇÃÉNÉçÅ[ÉYÇÃÉXÉeÅ[É^ÉXÇï‘Ç∑ */
                  
     return err;
 }

 
ÉäÉXÉg 12 IACloseDocument ÇÃÉTÉìÉvÉã

è„Ç…é¶ÇµÇΩ IACloseDocument åƒÇ—èoǵÇ≈ÇÕÅAÉvÉâÉOÉCÉìÇÕ IAPluginInitBlock ç\ë¢ëÃÇâÓǵǃÉRÅ[ÉãÉoÉbÉNÇçsÇ¢ÅAÉtÉ@ÉCÉãÇÉNÉçÅ[ÉYǵǃǢNjÇ∑ÅBIAPluginInitBlock ç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕÅAÉäÉXÉg 11 Ç…é¶ÇµÇΩ IAOpenDocument åƒÇ—èoǵÇÃé¿çsíÜÇ…ÉRÉsÅ[Ç™ï€ë∂Ç≥ÇÍÇΩ inDoc ÉpÉâÉÅÅ[É^Ç©ÇÁã≠êßìIÇ…éùÇøçûÇ‹ÇÍÇ‹Ç∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


/* IAGetNextTextRun ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
                  
 OSStatus IAGetNextTextRun(
         IADocRef inDoc,
         void* buffer,
         UInt32* size) {
                  
         /* ÉçÅ[ÉJÉãïœêî */
                  
     IADocAccessorPtr    docAccessor;
     OSStatus            err;
                  
         /* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
                  
     if (!inDoc)
         return errIAParamErr;
                  
         /* IADocRef Ç IAOpenDocument Ç≈íËã`ǵÇΩLJÇà (DZÇÃÉTÉìÉvÉãÇ≈
         ÇÕ IADocAccessorPtr) Ç…ÉLÉÉÉXÉgÇ∑ÇÈ */
                  
     docAccessor = (IADocAccessorPtr)inDoc;
                  
         /* ÉtÉ@ÉCÉãÇ©ÇÁÇÃì«Ç›çûÇ›ÇÉRÅ[ÉãÉoÉbÉNÇ∑ÇÈ */
                  
     err = CallIADocumentAccessorRead(docAccessor, buffer, size);
                  
         /* ì«Ç›çûÇ›ëÄçÏÇÃåãâ Çï‘Ç∑ */
                  
     return err;
 }

 
ÉäÉXÉg 13 IAGetNextTextRun ÇÃÉTÉìÉvÉã

è„Ç…é¶ÇµÇΩ IACloseDocument åƒÇ—èoǵÇ≈ÇÕÅAÉvÉâÉOÉCÉìÇÕ IAPluginInitBlock ç\ë¢ëÃÇâÓǵǃÉRÅ[ÉãÉoÉbÉNÇçsÇ¢ÅAÉtÉ@ÉCÉãÇ©ÇÁÉfÅ[É^ÉoÉCÉgÇì«Ç›çûÇÒÇ≈ǢNjÇ∑ÅBIAPluginInitBlock ç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕÅAÉäÉXÉg 11 Ç…é¶ÇµÇΩ IAOpenDocument åƒÇ—èoǵÇÃé¿çsíÜÇ…ÉRÉsÅ[Ç™ï€ë∂Ç≥ÇÍÇΩ inDoc ÉpÉâÉÅÅ[É^Ç©ÇÁã≠êßìIÇ…éùÇøçûÇ‹ÇÍÇ‹Ç∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ


                  
/* IAGetTextRunInfo ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
                  
 OSStatus IAGetTextRunInfo(
         IADocRef inDoc,
         char** outEncoding,
         char** outLanguage) {
                  
         /* ÉtÉ@ÉCÉãÇÃÉGÉìÉRÅ[ÉfÉBÉìÉOÇΔåæåÍÇ™ÇÌÇ©ÇÁǻǢÇΩÇfl NULL Ç…ê›íËÇ∑ÇÈ */
                  
     if (outEncoding != NULL) *outEncoding = NULL;
     if (outLanguage != NULL) *outLanguage = NULL;
                  
         /* ÉçÅ[ÉJÉãïœêî */
                  
     return errIANoErr;
 }

 
ÉäÉXÉg 14 IAGetTextRunInfo ÇÃÉTÉìÉvÉã

DZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAÉeÉLÉXÉgÉGÉìÉRÅ[ÉfÉBÉìÉOÇΔåæåÍÇÃóºï˚Ç™îFéØÇ≈ǴǻǢDZÇΔÇé¶Ç∑ NULL Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ




ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁÇà Text Extractor ÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵ

éüÇ…ÅAÉNÉâÉCÉAÉìÉgÇ™ Text Extractor ÉvÉâÉOÉCÉìÇégǡǃèëófiÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoÇ∑ï˚ñ@DžǬǢǃÉTÉìÉvÉãÇé¶ÇµÇ‹Ç∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈ÇÕÅADZÇÍÇÁÇÃÉãÅ[É`ÉìÇ‹ÇΩÇÕDZÇÍÇÁÇÃÉãÅ[É`ÉìÇ…èCê≥Çâ¡Ç¶ÇΩLJÇÃÇégópǵǃ Text Extractor ÉvÉâÉOÉCÉìÇåƒÇ—èoǵÅAéñé¿è„džÇÁljÇÈèëófiÉ^ÉCÉvÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoÇ∑DZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

à»â∫ÇÃäeÉXÉeÉbÉvÇ≈ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈï˚ñ@ÅAÉRÅ[ÉãÉoÉbÉNç\ë¢ëÃÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈï˚ñ@ÅAǪǵǃç≈å„Ç…ÉeÉLÉXÉgÇÃéÊÇËèoǵÇé¿çsÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇåƒÇ—èoÇ∑ï˚ñ@DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅBǻǮÅADZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAì¡íËÇÃèëófiÇ…ëŒâûǵÇΩìKêÿÇ»ÉvÉâÉOÉCÉìÇåüçıÇ‹ÇΩÇÕîªífÇ∑ÇÈï˚ñ@DžǬǢǃÇÕê‡ñæÇµÇ‹ÇπÇÒÅB



Text Extractor ÉvÉâÉOÉCÉìÇÃÉZÉbÉgÉAÉbÉv

Ç‹Ç∏ÅAé¿çsÇèÄîıÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉZÉbÉgÉAÉbÉvǵÅAåƒÇ—èoǵÇΩÇ¢ÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^ÇÉvÉâÉOÉCÉìÇ÷ÇÃÉAÉNÉZÉXÇ…égópÇ∑ÇÈç\ë¢ëÃÇ…äiî[Ç∑ÇÈDZÇΔÇ©ÇÁénÇflÇ‹Ç∑ÅBÉäÉXÉg 15Ç…ÇÕÅADZÇÃÉ^ÉXÉNÇÃé¿çsÇ…égópÇ∑ÇÈÉãÅ[É`ÉìÇΔêÈåæÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅB

                  
          /* éüÇà typedef ÇÕ Text Extractor ÉvÉâÉOÉCÉìÇ…ÇÊǡǃÉGÉNÉX
         É|Å[ÉgÇ≥ÇÍÇÈÉãÅ[É`ÉìÇ…ëŒâûǵǃǢÇÈÅBDZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAÉRÅ[Éh
         ì‡Ç©ÇÁÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵÇçsǧÇΩÇflDžDZÇÍÇÁÇÃÉãÅ[É`ÉìÇégóp
         Ç∑ÇÈ */
                  
 typedef OSStatus (*PluginInitCallPtr)(IAPluginInitBlockPtr initBlock,
     IAPluginRef* outPluginRef);
                  
 typedef OSStatus (*PluginTermCallPtr)(IAPluginRef inPluginRef);
                  
 typedef OSStatus (*GetExtractorVersionCallPtr)(IAPluginRef inPluginRef,
     UInt32* outPluginVersion);
                  
 typedef OSStatus (*CountSupportedDocTypesCallPtr)(IAPluginRef inPluginRef,
     UInt32* outCount);
                  
 typedef OSStatus (*GetIndSupportedDocTypeCallPtr)(IAPluginRef inPluginRef,
     UInt32 inIndex, char** outMIMEType);
                  
 typedef OSStatus (*OpenDocumentCallPtr)(IAPluginRef inPluginRef,
     IADocAccessorPtr inDoc, IADocRef* outDoc);
                  
 typedef OSStatus (*CloseDocumentCallPtr)(IADocRef inDoc);
                  
 typedef OSStatus (*GetTextRunInfoCallPtr)(IADocRef inDoc,
     char** outEncoding, char** outLanguage);
                  
 typedef OSStatus (*GetNextTextRunCallPtr)(IADocRef inDoc, void* buffer,
     UInt32* size);
                  
                  
                  
         /* ExtractorRec ÇÕÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgǪÇÃLJÇÃÇ…ä÷
         Ç∑ÇÈèÓïÒÇäiî[Ç∑ÇÈÇΩÇflÇ…égópÇ≥ÇÍÇÈÅBDZÇÃíÜÇ…ÇÕÅAÉtÉâÉOÉÅÉìÉg
         ÇÃÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^ÅAÇ®ÇÊÇ—ÉtÉâÉOÉÅÉìÉgÇà CFM ê⁄ë± ID î‘çÜ
         Ç™ä‹Ç‹ÇÍÇÈ */
                  
 typedef struct {
     ConnectionID connID;
     PluginInitCallPtr PluginInit;
     PluginTermCallPtr PluginTerm;
     GetExtractorVersionCallPtr GetExtractorVersion;
     CountSupportedDocTypesCallPtr CountSupportedDocTypes;
     GetIndSupportedDocTypeCallPtr GetIndSupportedDocType;
     OpenDocumentCallPtr OpenDocument;
     CloseDocumentCallPtr CloseDocument;
     GetTextRunInfoCallPtr GetNextTextRun;
     GetNextTextRunCallPtr GetTextRunInfo;
 } ExtractorRec, *ExtractorRecPtr;
                  
                  
                  
         /* OpenExtractor ÇÕÅAspec ÉpÉâÉÅÅ[É^Ç≈éQèΔÇ≥ÇÍÇÈ FSSpec Éå
         ÉRÅ[ÉhÇ…ÇÊǡǃéQèΔÇ≥ÇÍÇÈ Text Extractor ÉvÉâÉOÉCÉìÇ…ëÆÇ∑ÇÈ
         ÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉçÅ[ÉhÇ∑ÇÈÅBèàóùÇ™ê≥èÌÇ…èIóπÇ∑ÇÈÇΔÅAÉvÉâ
         ÉOÉCÉìÇÃÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^Çä‹Çfiç\ë¢ëÃÇ™ï‘Ç≥ÇÍÇÈÅBÉGÉâÅ[Ç™
         î≠ê∂Ç∑ÇÈÇΔÅANULL Ç™ï‘Ç≥ÇÍÇÈ */
                  
 ExtractorRecPtr OpenExtractor(FSSpec *spec) {
     ExtractorRecPtr extr;
     Str63 fragName;
     Ptr mainAddr;
     Str255 errName;
     Boolean fragmentExists; /* fragConnID ÇÃì‡óeÇí«ê’Ç∑ÇÈ */
     ConnectionID fragConnID;
     CFragSymbolClass symbolClass;
                  
         /* ÉçÅ[ÉJÉãïœêîÇä˘ímÇÃÉXÉeÅ[É^ÉXÇ…ÉZÉbÉgÉAÉbÉvÇ∑ÇÈ */
                  
     extr = NULL;
     fragmentExists = false;
                  
         /* ÉvÉâÉOÉCÉìÇ…ä÷Ç∑ÇÈèÓïÒÇï€ë∂Ç∑ÇÈÇΩÇflÇ…ÉÅÉÇÉäÇäÑÇËìñǃÇÈ */
                  
     extr = (ExtractorRecPtr) NewPtrClear(sizeof(ExtractorRec));
     if (extr == NULL) goto bail;
                  
         /* égópÇ≈Ç´ÇÈÇÊǧDžÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈ */
                  
    err = GetDiskFragment(spec, 0, kWholeFork, fragName, kLoadNewCopy,
             &fragConnID, &mainAddr, errName);
     if (err != noErr) goto bail;
     fragmentExists = true;
     extr->connID = fragConnID;
                  
         /* åƒÇ—èoǵÇΩÇ¢ÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^Çï€ë∂Ç∑ÇÈ */
                  
     err = FindSymbol(fragConnID, "\pIAPluginInit",
             (Ptr*) &extr->PluginInit, &symbolClass);
     if (err != noErr) goto bail;
                  
     err = FindSymbol(fragConnID, "\pIAPluginTerm",
             (Ptr*) &extr->PluginTerm, &symbolClass);
     if (err != noErr) goto bail;
                  
     err = FindSymbol(fragConnID, "\pIAGetExtractorVersion",
             (Ptr*) &extr->GetExtractorVersion, &symbolClass);
     if (err != noErr) goto bail;
                  
     err = FindSymbol(fragConnID, "\pIACountSupportedDocTypes",
             (Ptr*) &extr->CountSupportedDocTypes, &symbolClass);
     if (err != noErr) goto bail;
                  
     err = FindSymbol(fragConnID, "\pIAGetIndSupportedDocType",
             (Ptr*) &extr->GetIndSupportedDocType, &symbolClass);
     if (err != noErr) goto bail;
                  
     err = FindSymbol(fragConnID, "\pIAOpenDocument",
             (Ptr*) &extr->OpenDocument, &symbolClass);
     if (err != noErr) goto bail;
                  
     err = FindSymbol(fragConnID, "\pIACloseDocument",
             (Ptr*) &extr->CloseDocument, &symbolClass);
     if (err != noErr) goto bail;
                  
     err = FindSymbol(fragConnID, "\pIAGetNextTextRun",
             (Ptr*) &extr->GetNextTextRun, &symbolClass);
     if (err != noErr) goto bail;
                  
     err = FindSymbol(fragConnID, "\pIAGetTextRunInfo",
             (Ptr*) &extr->GetTextRunInfo, &symbolClass);
     if (err != noErr) goto bail;
                  
         /* ê≥èÌÇ…èàóùÇèIóπÇ∑ÇÈ */
                  
     return extr;
                  
 bail:
                  
     if (fragmentExists) CloseConnection(&fragConnID);
     if (extr != NULL) DisposePtr(Ptr) extr);
     return NULL;
 }
                  
         /* CloseExtractor ÇÕÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉAÉìÉçÅ[
         ÉhǵÅAÉvÉâÉOÉCÉìÇÉIÅ[ÉvÉìÇ∑ÇÈÇΔÇ´Ç…äÑÇËìñǃÇΩÉÅÉÇÉäÇâï˙Ç∑
         ÇÈ */
                  
 void CloseExtractor(ExtractorRecPtr extr) {
                  
         /* ÉvÉâÉOÉCÉìÇÃÉtÉ@ÉCÉãÇ÷Çà Code Fragment Manager ê⁄ë±ÇÉNÉçÅ[ÉYÇ∑ÇÈ */
                  
     CloseConnection(&extr->connID);
                  
         /* ÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇí«ê’Ç∑ÇÈÇΩÇflÇ…égópǵǃǢÇΩ
         ÉÅÉÇÉäÇâï˙Ç∑ÇÈ */
                  
     DisposePtr((Ptr) extr);
 }

 
ÉäÉXÉg 15 é¿çsÇ…égópÇ∑ÇÈ Text Extractor ÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈÉãÅ[É`Éì

ÉäÉXÉg 15 Ç…é¶ÇµÇΩÉvÉçÉgÉ^ÉCÉvÇégópÇ∑ÇÈÇΔÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉãÉoÉbÉNÇçsǶÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBDZÇÍÇÁÇÃÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕ ExtractorRec ç\ë¢ëÃÇ…äiî[Ç≥ÇÍǃǢNjÇ∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IAPluginInitBlock ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉv

ÉäÉXÉg 16 Ç…ÅAIAPluginInitBlock ç\ë¢ëÃÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈÉãÅ[É`ÉìÇé¶ÇµÇ‹Ç∑ÅBDZDZÇ≈ÅAÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÇÕÅAç\ë¢ëÃÇ…ä‹Ç‹ÇÍÇÈǪÇÍÇÁÇÃÉRÅ[ÉãÉoÉbÉNÇéQèΔÇ∑ÇÈÉãÅ[É`ÉìÉfÉBÉXÉNÉäÉvÉ^Çï€ë∂Ç∑ÇÈç\ë¢ëÃÇÃíÜÇ≈éQèΔÇ≥ÇÍÇ‹Ç∑ÅB

                  
         /* NewIAPluginInitBlock ÇÕÅAÉvÉâÉOÉCÉìÇ™åƒÇ—èoÇ∑DZÇΔÇÃÇ≈Ç´ÇÈ
         ÉÅÉÇÉääÑÇËìñǃÉãÅ[É`ÉìÇΔÉAÉCÉhÉãÉãÅ[É`ÉìÇä‹ÇfiêVǵǢ 
         InitBlock ÉåÉRÅ[ÉhÇäÑÇËìñǃÇÈÅBÉGÉâÅ[Ç™î≠ê∂Ç∑ÇÈÇΔÅANULL Ç™ï‘
         Ç≥ÇÍÇÈ */
                  
 IAPluginInitBlockPtr NewIAPluginInitBlock(void) {
     IAPluginInitBlockPtr iBlock;
     iBlock = NULL;
                  
     iBlock = (IAPluginInitBlockPtr) NewPtrClear(sizeof(IAPluginInitBlock));
     if (iBlock == NULL) goto bail;
                  
     iBlock->Alloc = NewIAAllocProc(MyIAAlloc);
     if (iBlock->Alloc == NULL) goto bail;
                  
     iBlock->Free = NewIAFreeProc(MyIAFreeProc);
     if (iBlock->Free == NULL) goto bail;
                  
     iBlock->Idle = NewIAIdleProc(MyIAIdleProc);
     if (iBlock->Idle == NULL) goto bail;
                  
     return iBlock;
                  
 bail:
     if (iBlock != NULL) {
         if (iBlock->Alloc != NULL)
             DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Alloc);
         if (iBlock->Free != NULL)
             DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Free);
         if (iBlock->Idle != NULL)
             DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Idle);
         DisposePtr((Ptr) iBlock);
     }
     return NULL;
 }
                  
         /* DisposeIAPluginInitBlock ÇÕÅANewIAPluginInitBlock Ç≈äÑÇËìñ
         ǃÇÁÇÍÇΩ InitBlock ÉåÉRÅ[ÉhÇ™êËóLÇ∑ÇÈÉÅÉÇÉäÇâï˙Ç∑ÇÈ */
                  
 void DisposeIAPluginInitBlock(IAPluginInitBlockPtr iBlock) {
     DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Alloc);
     DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Free);
     DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Idle);
     DisposePtr((Ptr) iBlock);
 }
                  

 
ÉäÉXÉg 16 IAPluginInitBlock ç\ë¢ëÃÇÃäÑÇËìñǃÇΔèâä˙âªÇçsǧÉãÅ[É`Éì

ÉäÉXÉg 16 Ç…é¶ÇµÇΩÉãÅ[É`ÉìÇÕÅAMemory Manager ÇåƒÇ—èoÇ∑ÉãÅ[É`ÉìÇégópÇ∑ÇÈÇΩÇflÅAIAPluginInitBlock ç\ë¢ëÃÇÃäÑÇËìñǃÇΔäÑÇËìñǃâèúÇçsǢNjÇ∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



IADocAccessorRecord ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉv

ÉäÉXÉg 17 ÇÃÉãÅ[É`ÉìÇΔêÈåæÇÕÅAÉvÉâÉOÉCÉìÇÃÉtÉ@ÉCÉãÉAÉNÉZÉXÉRÅ[ÉãÉoÉbÉNÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈï˚ñ@DžǬǢǃãÔëÃìIÇ…ê‡ñæÇµÇ‹Ç∑ÅBDZDZÇ≈ÇÕÅAÉRÅ[ÉãÉoÉbÉNç\ë¢ëÃÇΔÅAÉtÉ@ÉCÉãǪÇÃLJÇÃÇåpë±ìIÇ…í«ê’Ç∑ÇÈLJǧ 1 ǬÇÃç\ë¢ëÃÇäÑÇËìñǃNjÇ∑ÅB

                  
         /* MyDocumentReference Ç…ÇÕÅAÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÇÈì¸óÕ
         É\Å[ÉXÇí«ê’Ç∑ÇÈÇΩÇflÇ…åƒÇ—èoǵå≥Ç…ÇÊǡǃégópÇ≥ÇÍÇÈèÓïÒÇ™ä‹Ç‹
         ÇÍÇÈÅBDZDZÇ≈ÇÕÅAMac OS ÉtÉ@ÉCÉãÇégópǵǃǢÇÈ */
                  
 typedef struct {
     FSSpec spec;  /* FSSpec ÉåÉRÅ[ÉhÇÃÉRÉsÅ[ */
     Boolean docOpen; /* èëófiÇ™ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈÇΔÇ´ÇÕ true */
     short refnum; /* ÉtÉ@ÉCÉãéQèΔî‘çÜ */
 } MyDocumentReference, *MyDocRefPtr;
                  
         /* DZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAIADocAccessorRecord ÇÃÉtÉBÅ[ÉãÉhÇ…ÅAMac 
         OS ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇâÓǵǃåƒÇ—èoÇ≥ÇÍÇÈÉãÅ[É`ÉìÇéQèΔÇ∑ÇÈÉãÅ[
         É`ÉìÉfÉBÉXÉNÉäÉvÉ^ÇèëÇ´çûÇfiÅBDZÇÍÇÁÇÃÉãÅ[É`ÉìÇÕà»â∫ÇÃÇÊǧDž
         íËã`Ç≥ÇÍǃǢÇÈ */
                  
 static OSStatus MyIADocAccessorOpenProc(IADocAccessorRef inAccessor) {
     MyDocRefPtr refptr;
     IADocAccessorPtr accPtr;
     OSErr err;
     accPtr = (IADocAccessorPtr) inAccessor;
     refptr = (MyDocRefPtr) accPtr->docAccessor;
                  
     err = FSpOpenDF(&refptr->spec, fsRdPerm, &refptr->refnum);
     if (err == noErr)
         refptr->docOpen = true;
     return (OSStatus) err;
 }
                  
 static OSStatus MyIADocAccessorCloseProc(IADocAccessorRef inAccessor) {
     MyDocRefPtr refptr;
     IADocAccessorPtr accPtr;
     accPtr = (IADocAccessorPtr) inAccessor;
     refptr = (MyDocRefPtr) accPtr->docAccessor;
     if ( ! refptr->docOpen)
         return errIAParamErr;
     FSClose(refptr->refnum);
     refptr->docOpen = false;
     return errIANoErr;
 }
                  
 static OSStatus MyIADocAccessorReadProc(IADocAccessorRef inAccessor,
                                             void* buffer, UInt32* ioSize) {
     MyDocRefPtr refptr;
     IADocAccessorPtr accPtr;
     OSErr err;
     accPtr = (IADocAccessorPtr) inAccessor;
     refptr = (MyDocRefPtr) accPtr->docAccessor;
                  
     if ( ! refptr->docOpen)
         return errIAParamErr;
                  
     err = FSRead(refptr->refnum, ioSize, buffer);
                  
     return (OSStatus) err;
 }
                  
 static OSStatus MyIASetDocAccessorReadPositionProc(
             IADocAccessorRef inAccessor, SInt32 inMode, SInt32 inOffset) {
     MyDocRefPtr refptr;
     IADocAccessorPtr accPtr;
     OSErr err;
     accPtr = (IADocAccessorPtr) inAccessor;
     refptr = (MyDocRefPtr) accPtr->docAccessor;
                  
     if ( ! refptr->docOpen)
         return errIAParamErr;
                  
     case (inMode) {
         case kIAFromStartMode:
             err = SetFPos(refptr->refnum, fsFromStart, inOffset);
             break;
         case kIAFromCurrMode:
             err = SetFPos(refptr->refnum, fsFromMark, inOffset);
             break;
         case kIAFromEndMode:
             err = SetFPos(refptr->refnum, fsFromLEOF, inOffset);
             break;
         default:
             err = errIAParamErr;
             break;
     }
                  
     return (OSStatus) err;
 }
                  
 static OSStatus MyIAGetDocAccessorReadPositionProc(
             IADocAccessorRef inAccessor, SInt32* outPosition) {
     MyDocRefPtr refptr;
     IADocAccessorPtr accPtr;
     OSErr err;
     accPtr = (IADocAccessorPtr) inAccessor;
     refptr = (MyDocRefPtr) accPtr->docAccessor;
                  
     if ( ! refptr->docOpen)
         return errIAParamErr;
                  
     err = GetFPos(refptr->refnum, outPosition);
                  
     return (OSStatus) err;
 }
                  
 static OSStatus MyIAGetDocAccessorEOFProc(
     IADocAccessorRef inAccessor, SInt32* outEOF) {
     MyDocRefPtr refptr;
     IADocAccessorPtr accPtr;
     OSErr err;
     accPtr = (IADocAccessorPtr) inAccessor;
     refptr = (MyDocRefPtr) accPtr->docAccessor;
                  
     if ( ! refptr->docOpen)
         return errIAParamErr;
                  
     err = GetEOF(refptr->refnum, outEOF);
                  
     return (OSStatus) err;
 }
                  
         /* NewIADocAccessorRec ÇÕÅAMac OS ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇâÓǵǃåƒ
         Ç—èoÇ≥ÇÍÇÈÉãÅ[É`ÉìÇéQèΔÇ∑ÇÈÉãÅ[É`ÉìÉfÉBÉXÉNÉäÉvÉ^Çä‹Çfi 
         IADocAccessorRecord Çèâä˙âªÇ∑ÇÈÅBNewIADocAccessorRec ÇÕÅA
         ÉtÉ@ÉCÉãÇ…ä÷Ç∑ÇÈèÓïÒÇä‹ÇfiÉåÉRÅ[ÉhÇ IADocAccessorRecord Éå
         ÉRÅ[ÉhÇà docAccessor ÉtÉBÅ[ÉãÉhÇ…äiî[Ç∑ÇÈÅBÉGÉâÅ[Ç™î≠ê∂Ç∑ÇÈ
         ÇΔÅANULL Ç™ï‘Ç≥ÇÍÇÈ */
                  
 IADocAccessorPtr NewIADocAccessorRec(FSSpec *targetFile) {
     IADocAccessorPtr docAcc;
     MyDocRefPtr refptr;
                  
     iBlock = NULL;
     refptr = NULL;
                  
     refptr = (MyDocRefPtr) NewPtr(sizeof(MyDocumentReference));
     if (refptr == NULL) goto bail;
     refptr->spec = *targetFile;
     refptr->docOpen = false;
     refptr->refnum = 0;
                  
     docAcc = (IADocAccessorPtr) NewPtrClear(sizeof(IADocAccessorRecord));
     if (docAcc == NULL) goto bail;
     docAcc->docAccessor = (IADocAccessorRef) refptr;
                  
     docAcc->OpenDoc = NewIADocAccessorOpenProc(MyIADocAccessorOpenProc);
     if (docAcc->OpenDoc == NULL) goto bail;
                  
     docAcc->CloseDoc = NewIADocAccessorCloseProc(MyIADocAccessorCloseProc);
     if (docAcc->CloseDoc == NULL) goto bail;
                  
     docAcc->ReadDoc = NewIADocAccessorReadProc(MyIADocAccessorReadProc);
     if (docAcc->ReadDoc == NULL) goto bail;
                  
     docAcc->SetReadPosition = NewIASetDocAccessorReadPositionProc(
             MyIASetDocAccessorReadPositionProc);
     if (docAcc->SetReadPosition == NULL) goto bail;
                  
     docAcc->GetReadPosition = NewIAGetDocAccessorReadPositionProc(
             MyIAGetDocAccessorReadPositionProc);
     if (docAcc->GetReadPosition == NULL) goto bail;
                  
     docAcc->GetEOF = NewIAGetDocAccessorEOFProc(
             MyIAGetDocAccessorEOFProc);
     if (docAcc->GetEOF == NULL) goto bail;
                  
     return docAcc;
                  
 bail:
     if (refptr != NULL) DisposePtr((Ptr) refptr);
     if (docAcc != NULL) {
         if (docAcc->OpenDoc != NULL)
             DisposeRoutineDescriptor((UniversalProcPtr) docAcc->OpenDoc);
         if (docAcc->CloseDoc != NULL)
             DisposeRoutineDescriptor((UniversalProcPtr) docAcc->CloseDoc);
         if (docAcc->ReadDoc != NULL)
             DisposeRoutineDescriptor((UniversalProcPtr) docAcc->ReadDoc);
         if (docAcc->SetReadPosition != NULL)
             DisposeRoutineDescriptor((UniversalProcPtr) docAcc->SetReadPosition);
         if (docAcc->GetReadPosition != NULL)
             DisposeRoutineDescriptor((UniversalProcPtr) docAcc->GetReadPosition);
         if (docAcc->GetEOF != NULL)
             DisposeRoutineDescriptor((UniversalProcPtr) docAcc->GetEOF);
         DisposePtr((Ptr) docAcc);
     }
     return NULL;
 }
                  
         /* DisposeIADocAccessorRec ÇÕÅANewIADocAccessorRec Ç…ÇÊǡǃäÑ
         ÇËìñǃÇÁÇÍÇΩ IADocAccessorRecord Çâï˙Ç∑ÇÈÅBÇ∑Ç◊ǃÇÃÉTÉu
         ÉtÉBÅ[ÉãÉhÇÃäÑÇËìñǃLJâèúÇ≥ÇÍÇÈÅBÉtÉ@ÉCÉãÇ™ÉIÅ[ÉvÉìÇ≥ÇÍǃǢ
         ÇÈèÍçáÇÕÅAç\ë¢ëÃÇÃäÑÇËìñǃÇâèúÇ∑ÇÈëOÇ…ÉtÉ@ÉCÉãÇ™ÉNÉçÅ[ÉYÇ≥
         ÇÍÇÈ */
                  
 void DisposeIADocAccessorRec(IADocAccessorPtr docAcc) {
     MyDocRefPtr refptr;
                  
         /* èëófiéQèΔÇîjä¸Ç∑ÇÈ */
     refptr = (MyDocRefPtr) docAcc->docAccessor;
                  
         /* ÉtÉ@ÉCÉãÇ™ÉNÉçÅ[ÉYÇ≥ÇÍǃǢÇÈDZÇΔÇämîFÇ∑ÇÈ -- ǪǧÇ≈Ç»ÇØÇÍÇŒÉNÉçÅ[ÉYÇ∑ÇÈ */
     if (refptr->docOpen) FSClose(refptr->refnum);
                  
     DisposePtr((Ptr) refptr);
                  
         /* ÉAÉNÉZÉbÉTç\ë¢ëÃÇâï˙Ç∑ÇÈ */
     DisposeRoutineDescriptor((UniversalProcPtr) docAcc->OpenDoc);
     DisposeRoutineDescriptor((UniversalProcPtr) docAcc->CloseDoc);
     DisposeRoutineDescriptor((UniversalProcPtr) docAcc->ReadDoc);
     DisposeRoutineDescriptor((UniversalProcPtr) docAcc->SetReadPosition);
     DisposeRoutineDescriptor((UniversalProcPtr) docAcc->GetReadPosition);
     DisposeRoutineDescriptor((UniversalProcPtr) docAcc->GetEOF);
     DisposePtr((Ptr) docAcc);
 }
                  

 
ÉäÉXÉg 17 IADocAccessorRecord ÇÃäÑÇËìñǃÇΔèâä˙âªÇçsǧÉãÅ[É`Éì

ÉäÉXÉg 17 Ç≈ÇÕÅAFile Manager ÇÃåƒÇ—èoǵÇégǡǃÉtÉ@ÉCÉãÇ…ÉAÉNÉZÉXǵǃǢNjÇ∑ÅBFile Manager Ç…ÇÊǡǃégópÇ≥ÇÍÇÈèÓïÒÇí«ê’Ç∑ÇÈÇΩÇflÅAǪÇÃèÓïÒÇä‹ÇfiÉvÉâÉCÉxÅ[Égç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^Ç IADocAccessorRecord Çà docAccessor ÉtÉBÅ[ÉãÉhÇ…äiî[ǵǃǢNjÇ∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



Text Extractor ÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵ

ÉäÉXÉg 18 ÇÃÉãÅ[É`ÉìÇÕ Text Extractor ÉvÉâÉOÉCÉìÇåƒÇ—èoǵǃÅAÉtÉ@ÉCÉãÇ©ÇÁÉeÉLÉXÉgèÓïÒÇé˚èWǵNjÇ∑ÅBÉtÉ@ÉCÉãÇ©ÇÁé˚èWÇ≥ÇÍÇΩÉeÉLÉXÉgÇÕÅAåƒÇ—èoǵå≥Ç™ÉpÉâÉÅÅ[É^ÇΔǵǃéwíËǵǃǢÇÈÉãÅ[É`ÉìÇâÓǵǃåƒÇ—èoǵå≥Ç…ìnÇ≥ÇÍÇ‹Ç∑ÅB

                  
     /* kETBufferSize ÇÕÅAÉeÉLÉXÉgÇÃÉ`ÉÉÉìÉNÇéÊìæÇ∑ÇÈÇΩÇflÇ…äÑÇËìñ
     ǃÇÁÇÍǃǢÇÈÉoÉbÉtÉ@ÇÃÉTÉCÉYÇåàíËÇ∑ÇÈ */
                  
#define kETBufferSize (1024*1)
                  
     /* TextSinkProc ÇÕåƒÇ—èoǵå≥Ç…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉN
     ÉãÅ[É`ÉìÅBÉtÉ@ÉCÉãÇ©ÇÁéÊÇËèoÇ≥ÇÍÇΩÉeÉLÉXÉgÇÕÅAǪÇÃNjNjDZÇÃ
     ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇÈ */
                  
                  
typedef OSErr (*TextSinkProc)(void* text, long length, long refcon);
                  
     /* ExtractTextFromFile ÇÕÅA*theExtractor Ç…ÇÊǡǃéQèΔÇ≥ÇÍǃǢ
     ÇÈ Text Extractor ÉvÉâÉOÉCÉìÇåƒÇ—èoǵǃÅA*targetFile Ç…ÇÊÇ¡
     ǃéQèΔÇ≥ÇÍǃǢÇÈÉtÉ@ÉCÉãÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoÇ∑ÅBÉeÉLÉXÉgÇÃéÊ
     ÇËèoǵÇΔï¿çsǵǃÅAéÊÇËèoÇ≥ÇÍÇΩÉeÉLÉXÉgÇÕ textsink ÉpÉâÉÅÅ[É^
     Ç≈éwíËÇ≥ÇÍǃǢÇÈ TextSinkProc Ç…ëóêMÇ≥ÇÍÇÈÅBrefcon ÇÕÅA
     TextSinkProc Çà refcon ÉpÉâÉÅÅ[É^Ç…ìnÇ≥ÇÍÇÈíl */
                  
OSErr ExtractTextFromFile(FSSpec *targetFile, FSSpec *theExtractor,
                                    TextSinkProc textsink, long refcon) {
    ExtractorRecPtr extractor;
    IAPluginInitBlockPtr initblock;
    IADocAccessorPtr accRec;
    IAPluginRef inPluginRef;
    UInt32 pluginVersion;
    Boolean exInited, docOpen;
    IADocRef docRef;
    Ptr etBuffer;
    
        /* ÉçÅ[ÉJÉãïœêîÇä˘ímÇÃÉXÉeÅ[É^ÉXÇ…ÉZÉbÉgÉAÉbÉvÇ∑ÇÈ */
        
    extractor = NULL;
    initblock = NULL;
    accRec = NULL;
    exInited = false;
    docOpen = false;
    etBuffer = NULL;
    UInt32 bytecount;
    
         /* ÉvÉâÉOÉCÉìÇèâä˙âªÇ∑ÇÈ */
           
    extractor = OpenExtractor(theExtractor);
    if (extractor == NULL) goto bail;
    
     /* äÓñ{ìIÇ»ÉÅÉÇÉäÉ^ÉXÉNÇé¿çsÇ∑ÇÈÇΩÇflÅAÉvÉâÉOÉCÉìÇ…ÇÊǡǃégóp
     Ç≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÇèâä˙âªÇ∑ÇÈ */
                  
    initblock = NewIAPluginInitBlock();
    if (initblock == NULL) goto bail;
    
        /* ÉvÉâÉOÉCÉìÇÃèâä˙âªÉãÅ[É`ÉìÇåƒÇ—èoÇ∑ */
 
    err = extractor->PluginInit(initBlock, &pluginRef);
    if (err != noErr) goto bail;
    exInited = true;
    
     /* ÉvÉâÉOÉCÉìÇ…ñ‚çáÇπÇçsÇ¢ÅAåªç›égópǵǃǢÇÈÉCÉìÉ^ÉtÉFÅ[ÉXÇÃ
     ÉoÅ[ÉWÉáÉìÇΔÉvÉâÉOÉCÉìÇÃç\ízÇ…égópǵÇΩÉCÉìÉ^ÉtÉFÅ[ÉXÇÃÉoÅ[
     ÉWÉáÉìÇ™ìØä˙ǵǃǢÇÈDZÇΔÇämîFÇ∑ÇÈ */
    
    err = extractor->GetExtractorVersion(pluginRef, &pluginVersion);
    if (err != noErr) goto bail;
    if (pluginVersion != kIAExtractorVersion1) { err = errIAParamErr; goto bail; }
                  
     /* ñ⁄ìIÇÃèëófiÇëŒè€ÇΔǵÇΩÉtÉ@ÉCÉãì¸óÕÇçsǧÇΩÇflÅAÉvÉâÉOÉCÉìÇ…
     ÇÊǡǃégópÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÇèâä˙âªÇ∑ÇÈ */
                  
    accRec = NewIADocAccessorRec(targetFile);
    if (accRec == NULL) goto bail;
    
        /* ì«Ç›çûǛDžégópÇ∑ÇÈÉÅÉÇÉäÉoÉbÉtÉ@ÇäÑÇËìñǃÇÈ */
        
    etBuffer = NewPtr(kETBufferSize);
    if (etBuffer == NULL) { err = memFullErr; goto bail; }
    
        /* ÉvÉâÉOÉCÉìÇåƒÇ—èoǵÅAì¸óÕÇÃÇΩÇflÇ…èëófiÇÉIÅ[ÉvÉì
        Ç∑ÇÈÇÊǧDžóvãÅÇ∑ÇÈ */
        
    err = extractor->OpenDocument(pluginRef,  accRec, &docRef);
    if (err != noErr) goto bail;
    docOpen = true;
    
          /* DZDZÇ≈ÅAÉvÉâÉOÉCÉìǙǪÇÍà»è„ÉoÉCÉgÇï‘Ç≥Ç»Ç≠Ç»ÇÈÇ‹Ç≈ÉãÅ[ÉvÇ…ì¸ÇÈ */
                 
     while (true) {
                  
             /* ÉoÉbÉtÉ@ëSëÃÇ…ÉeÉLÉXÉgÇèëÇ´çûÇÒÇ≈Ç›ÇÈ */
                  
         bytecount = kETBufferSize;
         err = extractor->GetNextTextRun(docRef, etBuffer,  &bytecount);
                  
             /* eofErr ǻǫÇÃǪÇÃëºÇÃÉGÉâÅ[Ç™î≠ê∂ǵÇΩèÍçáÇÕÉãÅ[ÉvÇî≤ÇØÇÈ */
                  
         if (err != noErr) goto bail;
                  
             /* åæåÍÉGÉìÉRÅ[ÉfÉBÉìÉOÇ™ïœçXÇ≥ÇÍÇÈÇΔÅAerrIAEndOfTextRun Ç™ï‘
             Ç≥ÇÍÇÈÅBDZÇÃèÍçáÇÕâΩLJçsÇÌǻǢÅBǵǩǵÅAèÍçáÇ…ÇÊǡǃÇÕÇ¢Ç≠Ǭ
             Ç©ÇÃí«â¡èàóùÇçsǧïKóvLJdžÇÈ */
                  
         if (err == errIAEndOfTextRun) {
                  
             /* ÇΩǢǃǢÅAerrIAEndOfTextRun ÇÕÅAíºëOÇÃåƒÇ—èoǵǙíºëOÇÃÉGÉì
             ÉRÅ[ÉfÉBÉìÉOÉâÉìÇ©ÇÁÇ∑Ç◊ǃÇÃï∂éöÇì«Ç›çûÇÒÇ≈Ç¢ÇÈèÍçáÇ…êVǵǢ
             ï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇÃîÕàÕÇÃêÊì™Çé¶Ç∑ÇΩÇflÇæÇØÇ…ÅAÉTÉCÉYÇ™É[
             ÉçÇÃÉoÉbÉtÉ@ÇΔÇΔLJDžï‘Ç≥ÇÍÇÈÇΩÇflÅADZDZÇ≈ÇÕ bytecount ÇÉ`ÉFÉb
             ÉNǵǻǢ */
                  
            /* É[ÉçÉoÉCÉgÇ™ï‘Ç≥ÇÍÇΩÇΔÇ´ÇÕí èÌÇÃèIóπèàóùÇçsǧ */
                  
         } else if (bytecount == 0)
             break;
                  
                  
              /* DZÇÃéûì_Ç≈èëófiÇ©ÇÁÉeÉLÉXÉgÇÃÉ`ÉÉÉìÉNÇéÊìæÇµÇΩÅBDZDZÇ≈ÅA
             ǪÇÍÇåƒÇ—èoǵå≥ÇÃÉVÉìÉNÇ…ìnÇ∑ */
                  
         err = textsink(etBuffer, bytecount, refcon);
         if (err != noErr) goto bail;
     }
                  
             /* DZÇÃéûì_Ç≈èëófiÇ…ä‹Ç‹ÇÍÇÈÇ∑Ç◊ǃÇÃÉeÉLÉXÉgÇ™ì«Ç›çûÇ‹ÇÍÇΩÅBDZ
             DZÇ≈ÅAÉvÉâÉOÉCÉìÇ…ÉNÉçÅ[ÉYÇóvãÅǵÅAÉÅÉÇÉäÉoÉbÉtÉ@ÇÃîjä¸ÇΔ
             ÉtÉ@ÉCÉãì¸óÕÉRÅ[ÉãÉoÉbÉNç\ë¢ëÃÇÃîjä¸ÇçsǡǃÅAèëófiÇÉNÉçÅ[ÉY
             Ç∑ÇÈÅBDisposeIADocAccessorRec ÇÕÉäÉXÉg 17 Ç≈íËã`Ç≥ÇÍǃǢÇÈ */
   
        
    extractor->CloseDocument(docRef);
    docOpen = false;
    DisposePtr(etBuffer);
    etBuffer = NULL;
    DisposeIADocAccessorRec(docAcc);
    docAcc = NULL;
    
            /* èëófiÇÉNÉçÅ[ÉYǵÇΩå„ÅAÉvÉâÉOÉCÉìÇÕâï˙Ç≥ÇÍÇÈÅBDZÇÍÇÕÅAÉvÉâ
             ÉOÉCÉìÇÃèIóπÉvÉçÉVÅ[ÉWÉÉÇÃåƒÇ—èoǵÅAÉÅÉÇÉääÑÇËìñǃÉRÅ[ÉãÉoÉb
             ÉNÇÃâï˙ (DisposeIAPluginInitBlock ÇÕÉäÉXÉg 16 Ç≈íËã`Ç≥ÇÍǃǢ
             ÇÈ)ÅAǪǵǃÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃâï˙ 
             (CloseExtractor ÇÕÉäÉXÉg 15 Ç≈íËã`Ç≥ÇÍǃǢÇÈ) Ç…ÇÊǡǃé¿çsÇ≥
             ÇÍÇÈ */
        
    extractor->PluginTerm(pluginRef);
    exInited = false;
    DisposeIAPluginInitBlock(initblock);
    initblock = NULL;
    CloseExtractor(extractor);
    extractor = NULL;
    
        /* èàóùÇê≥èÌÇ…èIóπÇ∑ÇÈ */
        
    return noErr;
    
bail:
                  
        /* ÉGÉâÅ[èàóùÉRÅ[ÉhÅBâÒïúÉXÉeÅ[ÉgÉÅÉìÉgÇÃèáèòÇ™èdóvÇ≈džÇÈDZÇΔÇ…íçà” */
                
    if (docOpen) extractor->CloseDocument(docRef);
    if (etBuffer != NULL) DisposePtr(etBuffer);
    if (docAcc != NULL) DisposeIADocAccessorRec(docAcc);
    if (exInited) extractor->PluginTerm(pluginRef);
    if (initblock != NULL) DisposeIAPluginInitBlock(initblock);
    if (extractor != NULL) CloseExtractor(extractor);
    return err;
}
                  

 
ÉäÉXÉg 18 Text Extractor ÉãÅ[É`ÉìÇåƒÇ—èoÇ∑ÉãÅ[É`ÉìÇÃÉTÉìÉvÉã

ÉäÉXÉg 18 Ç…é¶ÇµÇΩÉãÅ[É`ÉìÇÕÅAÉvÉâÉOÉCÉìÇÃÉãÅ[É`ÉìÇíºê⁄åƒÇ—èoÇ∑DZÇΔÇ≈é¿ç€ÇÃÉeÉLÉXÉgÇÃéÊÇËèoǵÇé¿çsǵNjÇ∑ÅBDZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAåæåÍÉGÉìÉRÅ[ÉfÉBÉìÉOÇ‹ÇΩÇÕï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇ…ä÷êSÇ™ï•ÇÌÇÍǃǢNjÇπÇÒÅBÇΩÇæÇµÅADZÇÃÉTÉìÉvÉãÇ…é·ä±ÇÃèCê≥Çâ¡Ç¶ÇÈÇæÇØÇ≈ÅADZÇÃèÓïÒÇä»íPÇ…éÊìæÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBDZÇÃÉãÅ[É`ÉìÇ≈ÇÕÅAÉäÉXÉg 15ÅAÉäÉXÉg 16ÅAÇ®ÇÊÇ—ÉäÉXÉg 17 Ç≈íËã`Ç≥ÇÍǃǢÇÈç\ë¢ëÃÇΔÉãÅ[É`ÉìÇégópǵǃǢNjÇ∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



ÉRÅ[ÉhÉäÉXÉgÇÃçıà¯

éüÇ…ÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ…ä‹Ç‹ÇÍǃǢÇÈÉRÅ[ÉhÉäÉXÉgÇÃàÍóóÇé¶ÇµÇ‹Ç∑ÅBÉäÉXÉg 5 Ç©ÇÁ 14 ÇÕÉTÉìÉvÉãÉvÉâÉOÉCÉìÇÃì‡óeÇíËã`ǵǃǢNjÇ∑ÅBÇ‹ÇΩÅAÉäÉXÉg 15 Ç©ÇÁ 18 ÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁÉvÉâÉOÉCÉìÇåƒÇ—èoÇ∑ÇΩÇflÇÃãÔëÃìIÇ»ï˚ñ@Çé¶ÇµÇƒÇ¢Ç‹Ç∑ÅB

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ



Further References

ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ




çXêVì˙: 1999 îN 10 åé 5 ì˙